美文网首页人生旅途策略大本营2:自由,平等,友爱。
Python 科学计算库 NumPy 学习笔记 - 4 - 广播

Python 科学计算库 NumPy 学习笔记 - 4 - 广播

作者: 游文影月志 | 来源:发表于2020-09-16 07:10 被阅读0次

电梯直达:
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 绘制二维函数的图形

广播还有一个很有用的场景,就是当你需要绘制一个二维函数的图像时。如果我们希望定义一个函数z = f(x, y),可以利用广播来计算二维平面上每个网格的数值。

# 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();

相关文章

网友评论

    本文标题:Python 科学计算库 NumPy 学习笔记 - 4 - 广播

    本文链接:https://www.haomeiwen.com/subject/dnxcyktx.html