电梯直达:
Python 科学计算库 NumPy 学习笔记 - 1
Python 科学计算库 NumPy 学习笔记 - 2
Python 科学计算库 NumPy 学习笔记 - 3
Python 科学计算库 NumPy 学习笔记 - 4
Python 科学计算库 NumPy 学习笔记 - 5
Python 科学计算库 NumPy 学习笔记 - 6
Python 科学计算库 NumPy 学习笔记 - 7
Python 科学计算库 NumPy 学习笔记 - 8
13. 广播
除了通用函数 ufunc
,广播也可以让 NumPy
实现向量化操作。
np.arange(3) + 5
array([5, 6, 7])
np.ones((3, 3)) + np.arange(3)
array([[1., 2., 3.],
[1., 2., 3.],
[1., 2., 3.]])
np.arange(3).reshape(3, 1) + np.arange(3)
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4]])
13.1 广播的规则
- 如果两个数组的维度不同,那么维度较少的数组将会沿着最前(或最左)的维度进行扩充,从而使得两个数组的维度一致。
- 如果两个数组的形状在任何维度上都不相同,那么两个数组中形状等于1的维度将被拉伸以匹配另一个形状。
- 如果两个数组的形状在任何维度上都不相同且两者都不等于1,则会报错。
13.2 广播规则应用实例
13.2.1 中心化数组
数据的中心化是指原数据减去该组数据的平均值,经过中心化处理后,原数据的坐标平移至中心点 (0,0)
,该组数据的均值变为 0 ,以此也被称为零均值化。
假设有一个由 20 个观测值组成的数组,每个观测值由 2 个值组成。
M = np.random.random((20, 2))
MMean = M.mean(0)
MMean
array([0.40406624, 0.53184616])
这里就是一个广播操作:
MCentered = M - MMean
MCentered.mean()
1.3877787807814457e-17
中心化后的数据平均值是接近于 0 的。
13.2.2 绘制二维函数的图形
广播还有一个很有用的场景,就是当你需要绘制一个二维函数的图像时。如果我们希望定义一个函数,可以利用广播来计算二维平面上每个网格的数值。
# x and y have 50 steps from 0 to 5
x = np.linspace(0, 4, 50)
y = np.linspace(0, 4, 50)[:, np.newaxis]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
%matplotlib inline
import matplotlib.pyplot as plt
plt.imshow(z, origin='lower', extent=[0, 5, 0, 5],
cmap='viridis')
plt.colorbar();
网友评论