NumPy-什么是广播?

gwg*_*gwg 5 python numpy

我不懂广播。该文档解释了广播规则,但似乎没有用英语对其进行定义。我的猜测是,广播是当NumPy用虚拟数据填充较小尺寸的数组以执行操作时。但这不起作用:

>>> x = np.array([1,3,5])
>>> y = np.array([2,4])
>>> x+y
*** ValueError: operands could not be broadcast together with shapes (3,) (2,) 
Run Code Online (Sandbox Code Playgroud)

该错误消息暗示我走在正确的道路上。有人可以定义广播,然后提供一些简单的示例,说明何时可以正常播放,什么时候不可用?

mes*_*rra 5

术语“广播”描述了 numpy 在算术运算期间如何处理不同形状的数组。

这基本上是 numpy 扩展数组运算域的一种方式。

广播的唯一要求是对齐数组维度的方法,以便:

  • 对齐的尺寸相等。
  • 对齐的维度之一是 1。

因此,例如如果:

x = np.ndarray(shape=(4,1,3))
y = np.ndarray(shape=(3,3))
Run Code Online (Sandbox Code Playgroud)

你不能像这样对齐 x 和 y:

4 x 1 x 3
3 x 3
Run Code Online (Sandbox Code Playgroud)

但你可能会喜欢这样:

4 x 1 x 3
    3 x 3
Run Code Online (Sandbox Code Playgroud)

像这样的操作会产生什么结果?

假设我们有:

x = np.ndarray(shape=(1,3), buffer=np.array([1,2,3]),dtype='int')
array([[1, 2, 3]])

y = np.ndarray(shape=(3,3), buffer=np.array([1,1,1,1,1,1,1,1,1]),dtype='int')
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

该操作x + y将导致:

array([[2, 3, 4],
       [2, 3, 4],
       [2, 3, 4]])
Run Code Online (Sandbox Code Playgroud)

我希望你能明白其中的意思。如果您没有,您可以随时在此处查看官方文档。

干杯!