多维数组numpy乘以一维数组



我有一个多维数组和一组比例因子,我想沿着第一个轴应用:

>>> data.shape, scale_factors.shape
((22, 20, 2048, 2048), (22,))
>>> data * scale_factors
ValueError: operands could not be broadcast together with shapes (22,20,2048,2048) (22,) 

我可以用apply_along_axis做到这一点,但是有一个矢量化的方法来做到这一点吗?我发现了一个类似的问题,但解决方案是特定于1-D * 2-D操作。"data"narray并不总是相同的形状,甚至不总是具有相同的维数。但一维尺度因子的长度将始终与数据的0轴相同。

您可以尝试将data重塑为2D,然后将scale_factor广播到2D,然后再重塑回来:

(data.reshape(data.shape[0], -1) * scale_factors[:,None]).reshape(data.shape)

或者,您可以将0轴交换到最后,这样您就可以广播:

(data.swapaxes(0,-1) * scale_factors).swapaxes(0,-1)
data * scale_factors.reshape([-1]+[1]*(len(data.shape)-1))
data * scale_factors[:,None,None,None]