【发布时间】:2012-06-26 01:12:01
【问题描述】:
我在理解 Numpy 中数组广播的规则时遇到了一些麻烦。
显然,如果您对两个具有相同尺寸和形状的数组执行逐元素乘法,一切都很好。此外,如果将多维数组乘以标量,它也可以工作。这个我明白了。
但是,如果您有两个 不同 形状的 N 维数组,我不清楚广播规则到底是什么。这个documentation/tutorial 解释说:为了广播,一个操作中两个数组的尾随轴的大小必须要么相同,要么其中之一必须是一个。 em>
好的,所以我假设 尾随轴 他们指的是M x N 数组中的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
由于A 和B 都有两列,我原以为这会起作用。所以,我可能在这里误解了“尾轴”一词,以及它如何应用于 N 维数组。
有人可以解释为什么我的示例不起作用,以及“尾随轴”是什么意思吗?
【问题讨论】:
-
这对广播的解释非常好,scipy.org/EricsBroadcastingDoc
-
能否添加标签“广播”?
-
@BiRico 评论中的链接现在是 wiki.scipy.org/EricsBroadcastingDoc 我想知道为什么它被移动到 存档转储。
-
为什么叫广播?就像“虚数”这个名字一样令人困惑
-
不幸的是,链接scipy.org/EricsBroadcastingDoc 在我发表评论时不再可用。我正在寻找广播操作的简明定义。 docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html处的描述只是“广播”本身的循环定义!
标签: python numpy array-broadcasting