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

5

假设有一个二维向量数组:

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,)

I would like the result:

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

现在,执行 v*s 会出错。那么,实现 f 的最有效方法是什么?
1个回答

10

向向量添加一个新的单一维度:

v*s[:,None]

这相当于将向量重塑为 (len(s), 1) 的形式。然后,两个相乘的对象的形状将是 (4,2) 和 (4,1),由于 NumPy 广播规则(对应维度要么相等要么等于1),它们是兼容的。

请注意,当两个操作数具有不同数量的维度时,NumPy 会在维数较少的操作数“前面”插入额外的奇异维度。这会使您的向量变为 (1,4),与 (4,2) 不兼容。因此,我们明确指定添加额外的维度的位置,以使形状兼容。


这个有效!你能解释一下为什么这个有效吗? - bzm3r
@user89:添加了一个解释。 - nneonneo
这个使用 None 的语法与使用 np.newaxis 相同,(尽管我个人更喜欢使用 None 而不是 np.newaxis)。 - usethedeathstar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接