Numpy阵列广播规则

Cha*_*l72 20 python numpy numpy-broadcasting

我在Numpy中理解阵列广播的规则时遇到了一些麻烦.

显然,如果你在两个相同尺寸和形状的数组上执行逐元素乘法,一切都很好.此外,如果您将多维数组乘以标量,它就可以工作.我明白了.

但是如果你有两个不同形状的N维阵列,我不清楚我究竟是什么广播规则.本文档/教程解释说:为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须为1.

好的,所以我假设它是尾随轴,它们指的NM x N数组.那么,这意味着如果我尝试将两个二维数组(矩阵)乘以相同数量的列,它应该有效吗?除了它没有......

>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
 [3 4]]
>>> print(B)
[[ 2  3]
 [ 4  6]
 [ 6  9]
 [ 8 12]]
>>> 
>>> A * B
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Run Code Online (Sandbox Code Playgroud)

由于双方AB有两列,我还以为这会工作.所以,我可能误解了关于术语"拖尾轴"的一些内容,以及它如何应用于N维数组.

有人可以解释为什么我的例子不起作用,"尾轴"是什么意思?

unk*_*ulu 16

那么,尾随轴的含义在链接的文档页面上有解释.如果您有两个具有不同维度编号的数组,例如一个1x2x3和另一个2x3,那么在这种情况下,只比较尾随的公共维度2x3.但是如果你的数组都是二维的,那么它们的相应大小必须相等或者其中一个必须相同1.数组具有大小的维度1称为单数,并且可以沿着它们广播数组.

在你的情况下,你有一个2x24x2,4 != 2而且没有42等于1,所以这不起作用.