我想做这样的事情:
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 那里的特殊问题的性质,讨论非常简短,并且被追踪到其他问题。)
最佳答案
还有一个:
b = a * v.reshape(-1, 1)
恕我直言,这比 transpose
、einsum
甚至 v[:, None]
更具可读性,但请选择适合的那个你的风格。
关于python - 数组和向量的 numpy 逐元素乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19388152/