[英]Multiply multidimensional numpy array by 1-D array
我有一個多維數組和一組要沿第一個軸應用的比例因子:
>>> 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 操作。 “數據” ndarray 並不總是相同的形狀,甚至不會總是具有相同的維數。 但是一維 scale_factors 的長度將始終與數據的軸 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.