访问博客查看 本文 最新内容,排版更美观ヾ(•ω•`)o 如有错误欢迎指出~
Python 系列学习笔记:
学习 Machine Learning 的时候发现需要用许多矩阵运算和画图的库,本文将以实用主义的方式记录每次遇到的新用法。
2021 年贵系的暑培新增了「科学计算」内容,本文部分内容参考了清华 LZJ 同学的教程。本文将持续更新。
Matplotlib 基础
绘图时最常用的模块是 Matplotlib 中的 pyplot 模块。绘图时先调用相关绘图函数,设置图像各种细节,最后调用 plt.show()
显示图片。
这时会出现一个基于 Qt 实现的交互窗口,程序执行到 plt.show()
时阻塞。在交互窗口中可以进一步调整图片格式细节或保存图片,关闭窗口后程序继续运行。下面以一个例子说明:
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(-4, 4, 30) # [-4, 4] 中长度为 30 的等差数列
y = np.sin(x) # 获得 sin 值
plt.plot(x, y) # 以 x 为自变量,y 为因变量,绘制折线图
plt.show() # 显示图像,程序阻塞
格式字符串
与 Matlab 相似,Matplotlib 使用事先约定好的字符串代表绘图格式,将其写入 plt.plot()
即可,如 plt.plot(x, y, 'bo')
即蓝色圆圈标记。
-
color
:绘制点的颜色,支持以下缩写,还可以用c='#000'
指定。
字符 | 颜色 | 字符 | 颜色 | 字符 | 颜色 | 字符 | 颜色 |
---|---|---|---|---|---|---|---|
b |
蓝色 | r |
红色 | m |
洋红色 | k |
黑色 |
g |
绿色 | c |
青色 | y |
黄色 | w |
白色 |
-
marker
:绘制点的形状。
字符 | 标记 | 字符 | 标记 | 字符 | 标记 | 字符 | 标记 |
---|---|---|---|---|---|---|---|
. |
点标记 | > |
右三角标记 | p |
五边形标记 | D |
菱形标记 |
, |
像素标记 | 1 |
三叉戟标记 | * |
星形标记 | d |
菱形标记 |
o |
圆圈标记 | 2 |
三叉戟标记 | h |
六角形标记 | 丨 |
竖线标记 |
v |
倒三角标记 | 3 |
三叉戟标记 | H |
六角形标记 | _ |
横线标记 |
^ |
正三角标记 | 4 |
三叉戟标记 | + |
+标记 | ||
< |
左三角标记 | s |
正方形标记 | x |
x标记 |
-
line
:绘制线的形状。
字符 | 格式 | 字符 | 格式 | 字符 | 格式 | 字符 | 格式 |
---|---|---|---|---|---|---|---|
- |
实线 | -- |
虚线 | -. |
点划线 | : |
点线 |
特定类型图
下面是一些常用的绘图函数。更多官网案例:https://matplotlib.org/stable/gallery/index.html。
折线图 plot()
plt.plot()
用于绘制折线图,需要一系列点作为因变量和自变量,函数接口如下:
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
观察接口,可以发现有以下的用法:
- 传入两个等长数组或列表,前者是自变量,后者是因变量。
- 只传入一个数组或列表,自变量默认从 0 开始整数递增。
- 传入两个列表,各包含两个值,可以绘制一条直线。
散点图 scatter()
plt.scatter()
用于绘制散点图,需要两个等长数组或列表,函数接口如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, **kwargs)
其中只有 x
和 y
为必填项,s
代表每个点的大小,可以是常数也可以是列表。
子图 subplot()
plt.subplot()
用于在一张图里绘制多个子图,函数接口如下:
matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)
其中只有 nrow
和 ncols
表示总共有多少子图,index
代表其中第几个。如:plt.subplot(2,2,1)
,也可以缩写为 plt.subplot(221)
。
紧跟在 plt.subplot()
语句后面的语句绘制的就是 index
所指向的图,绘制完再次使用 plt.subplot()
语句切换到下一张子图。
其他辅助库
除了上述的数据分析第三方库,还有一些辅助工具库也许有用。因为不知道记在哪里,就先放在本节。
Time
time
是 Python 中处理时间的标准库,提供系统级精确计时功能(可以用于程序性能分析)。其主要功能分为三块:时间获取、时间格式化、程序计时,这里介绍计时相关内容。
-
sleep(s)
:s
为休眠时间,单位秒,可以是浮点数。 -
perf_counter()
:返回一个 CPU 级别的精确时间计数值,单位为秒。
后者的使用由于计数器起点不确定,连续调用求差值才有意义:
import time
import numpy as np
arr = np.arange(100000000)
start = time.perf_counter() # 计数器起点
arr = arr * 2
end = time.perf_counter() # 计数器终点
print('numpy time cost: %.3f s' % (end - start))
pipreqs
当我们写好一个 Python 项目之后,如果要开源代码,为了让别人能快速运行项目,一般可以提供一个 requirements.txt
的,用以配置环境。
pipreqs
是用于自动生成上述文件的一个第三方库,使用 pip install pipreqs
安装,进入项目根目录,执行 pipreqs ./
即可。如果出现编码错误,可以指定编码方式解决:
pipreqs ./ --encoding utf-8
其他人则可以使用以下命令配置环境:
pip install -r requirements.txt