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

use*_*r89 4 python arrays numpy

我们假设有一个2D向量数组:

v = np.array([ [1, 1], [1, 1], [1, 1], [1, 1]])
v.shape = (4, 2)
Run Code Online (Sandbox Code Playgroud)

还有一系列标量:

s = np.array( [2, 2, 2, 2] )
s.shape = (4,)
Run Code Online (Sandbox Code Playgroud)

我想结果:

f(v, s) = np.array([ [2, 2], [2, 2], [2, 2], [2, 2]])
Run Code Online (Sandbox Code Playgroud)

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

nne*_*neo 8

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

v*s[:,None]
Run Code Online (Sandbox Code Playgroud)

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

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