Python Numpy阵列广播规则

Python Numpy阵列广播规则,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我在理解Numpy中阵列广播的规则时遇到了一些困难 显然,如果在两个维度和形状相同的数组上执行元素相乘,一切都很好。此外,如果将多维数组与标量相乘,它也会起作用。这我理解 但是如果你有两个不同形状的N维数组,我不清楚广播规则到底是什么。这说明:为了进行广播,操作中两个阵列的后轴的大小必须相同,或者其中一个必须为一 好的,通过后轴,我假设它们指的是mn数组中的N。这意味着,如果我尝试将两个2D数组(矩阵)乘以相等的列数,它应该可以工作吗?除了它没有 >>> from numpy

我在理解Numpy中阵列广播的规则时遇到了一些困难

显然,如果在两个维度和形状相同的数组上执行元素相乘,一切都很好。此外,如果将多维数组与标量相乘,它也会起作用。这我理解

但是如果你有两个不同形状的N维数组,我不清楚广播规则到底是什么。这说明:为了进行广播,操作中两个阵列的后轴的大小必须相同,或者其中一个必须为一

好的,通过后轴,我假设它们指的是
mn
数组中的
N
。这意味着,如果我尝试将两个2D数组(矩阵)乘以相等的列数,它应该可以工作吗?除了它没有

>>> 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
来自numpy导入的
>>*
>>>A=数组([[1,2],[3,4]])
>>>B=数组([[2,3],[4,6],[6,9],[8,12])
>>>印刷品(A)
[[1 2]
[3 4]]
>>>印刷品(B)
[[ 2  3]
[ 4  6]
[ 6  9]
[ 8 12]]
>>> 
>>>A*B
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:形状不匹配:无法将对象广播到单个形状
由于
A
B
都有两列,我本以为这会起作用。所以,我可能误解了“尾轴”这个术语,以及它是如何应用于N维数组的


有人能解释一下为什么我的示例不起作用,以及“拖尾轴”是什么意思吗?

嗯,拖尾轴的含义在链接的文档页面上有解释。 如果有两个具有不同维度编号的数组,例如一个
1x2x3
和另一个
2x3
,则仅比较尾随的公共维度,在本例中为
2x3
。但是如果两个数组都是二维的,那么它们相应的大小必须相等,或者其中一个必须是
1
。数组沿其大小
1
的维度称为单数,数组可以沿其广播

在您的情况下,您有一个
2x2
4x2
4!=2
4
2
都不等于
1
,因此这不起作用。

来自:

将两个阵列一起广播遵循以下规则:

  • 如果数组的秩不相同,则在低秩数组的形状前加1,直到两个形状的长度相同

  • 如果两个数组在维度中的大小相同,或者其中一个数组在该维度中的大小为1,则称这两个数组在该维度中兼容

  • 如果阵列在所有维度上都兼容,则可以一起广播
  • 广播后,每个数组的行为就好像它的形状等于两个输入数组的元素最大形状一样
  • 在一个数组的大小为1而另一个数组的大小大于1的任何维度中,第一个数组的行为就像是沿着该维度复制的一样
  • 如果这个解释没有意义,请尝试阅读解释或


    换句话说,
    A
    shape
    应该是
    B
    shape
    的后缀,忽略任何值为1(?)的轴,如果忽略你的意思是“
    1
    等于任何东西”,并且
    shape(A)
    shape(B)
    可以是彼此的后缀,那么实际上,您可以将任何数组视为无限维大小
    …x1x>…xAxBxC
    ,因此我们有许多领先的
    1
    s,它们可以像其他数组一样广播。这样你就可以忘记后缀的东西,只要说
    1
    等于任何东西。这是对广播的一个很好的解释,你能添加标签“广播”吗?@BiRico comment中的链接现在是我想知道为什么它被移到存档转储。为什么它被命名为广播?这就像“虚数”这个名字一样令人困惑,不幸的是,在我发表评论时,这个链接已经不可用了。我在寻找广播业务的简明定义。这里的描述只是“广播”本身的循环定义!