簡體   English   中英

將多維 numpy 數組乘以一維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM