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