numpy:将2D数组乘以1D数组

时间:2014-06-16 22:10:21

标签: python arrays numpy

让我们说一个人有一个2D矢量数组:

v = np.array([ [1, 1], [1, 1], [1, 1], [1, 1]])
v.shape = (4, 2)

一系列标量:

s = np.array( [2, 2, 2, 2] )
s.shape = (4,)

我想结果:

f(v, s) = np.array([ [2, 2], [2, 2], [2, 2], [2, 2]])

现在,执行v*s是一个错误。那么,实施f的最有效方法是什么?

1 个答案:

答案 0 :(得分:8)

向矢量添加新的奇异维度:

v*s[:,None]

这相当于将矢量重塑为(len(s),1)。然后,相乘对象的形状将是(4,2)和(4,1),它们由于NumPy广播规则而相容(相应的尺寸彼此相等或等于1)。

请注意,当两个操作数具有不等数量的维度时,NumPy将在操作数“前面”插入额外的单个维度,并且维度更少。这会使你的矢量(1,4)与(4,2)不相容。因此,我们明确指定添加额外尺寸的位置,以使形状兼容。