python – Numpy数组广播规则

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

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

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

好吧,所以我假设它是尾随轴,它们指的是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维数组.

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

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

在你的情况下,你有一个2×2和4×2和4!= 2并且4或2都不等于1,所以这不起作用.

转载注明原文:python – Numpy数组广播规则 - 代码日志