Python Numpy阵列广播规则
我在理解Numpy中阵列广播的规则时遇到了一些困难 显然,如果在两个维度和形状相同的数组上执行元素相乘,一切都很好。此外,如果将多维数组与标量相乘,它也会起作用。这我理解 但是如果你有两个不同形状的N维数组,我不清楚广播规则到底是什么。这说明:为了进行广播,操作中两个阵列的后轴的大小必须相同,或者其中一个必须为一 好的,通过后轴,我假设它们指的是Python Numpy阵列广播规则,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我在理解Numpy中阵列广播的规则时遇到了一些困难 显然,如果在两个维度和形状相同的数组上执行元素相乘,一切都很好。此外,如果将多维数组与标量相乘,它也会起作用。这我理解 但是如果你有两个不同形状的N维数组,我不清楚广播规则到底是什么。这说明:为了进行广播,操作中两个阵列的后轴的大小必须相同,或者其中一个必须为一 好的,通过后轴,我假设它们指的是mn数组中的N。这意味着,如果我尝试将两个2D数组(矩阵)乘以相等的列数,它应该可以工作吗?除了它没有 >>> from numpy
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
,因此这不起作用。来自:
将两个阵列一起广播遵循以下规则:
换句话说,
A
的shape
应该是B
的shape
的后缀,忽略任何值为1(?)的轴,如果忽略你的意思是“1
等于任何东西”,并且shape(A)
或shape(B)
可以是彼此的后缀,那么实际上,您可以将任何数组视为无限维大小…x1x>…xAxBxC
,因此我们有许多领先的1
s,它们可以像其他数组一样广播。这样你就可以忘记后缀的东西,只要说1
等于任何东西。这是对广播的一个很好的解释,你能添加标签“广播”吗?@BiRico comment中的链接现在是我想知道为什么它被移到存档转储。为什么它被命名为广播?这就像“虚数”这个名字一样令人困惑,不幸的是,在我发表评论时,这个链接已经不可用了。我在寻找广播业务的简明定义。这里的描述只是“广播”本身的循环定义!