我想这样做:
a = # multi-dimensional numpy array
ares = # multi-dim array, same shape as a
a.shape
>>> (45, 72, 37, 24) # the relevant point is that all dimension are different
v = # 1D numpy array, i.e. a vector
v.shape
>>> (37) # note that v has the same length as the 3rd dimension of a
for i in range(37):
ares[:,:,i,:] = a[:,:,i,:]*v[i]
我想应该有一个更紧凑的方法来处理numpy,但是我还没有弄明白。我想我可以复制v,然后计算a*v
,但我想还有更好的方法。所以我需要在给定的轴上做元素乘法。有人知道我怎么做吗?谢谢。(顺便说一句,我确实发现了一个非常相似的问题,但由于OP的特殊问题的性质,讨论时间很短,并被跟踪到其他问题。)
你可以用爱因斯坦求和记法,用numpy的
einsum
函数来实现这一点:这里还有一个:
嗯,这比
transpose
,einsum
甚至v[:, None]
更易读,但是选择一个适合你风格的。可以automatically broadcast相对于数组最外轴的向量。因此,您可以transpose数组将您想要的轴交换到外部,乘法,然后将其转置回去:
相关问题 更多 >
编程相关推荐