让我们说一个人有一个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
的最有效方法是什么?
答案 0 :(得分:8)
向矢量添加新的奇异维度:
v*s[:,None]
这相当于将矢量重塑为(len(s),1)。然后,相乘对象的形状将是(4,2)和(4,1),它们由于NumPy广播规则而相容(相应的尺寸彼此相等或等于1)。
请注意,当两个操作数具有不等数量的维度时,NumPy将在操作数“前面”插入额外的单个维度,并且维度更少。这会使你的矢量(1,4)与(4,2)不相容。因此,我们明确指定添加额外尺寸的位置,以使形状兼容。