我有一個 3D 數組,我需要在一個方向上進行轉換。我有一個矩陣map_y,其中包含我使用np.dot. 是否可以避免for下面代碼中的嵌套循環?import numpy as npnx, ny, nz = 64, 32, 24nyc = 11a = np.random.rand(nz, ny, nx)ac = np.empty((nz, nyc, nx))map_y = np.random.rand(nyc, ny)# Can we do this in a single numpy function?for k in range(nz): for i in range(nx): ac[k,:,i] = np.dot(map_y, a[k,:,i])
1 回答

喵喵時光機
TA貢獻1846條經驗 獲得超7個贊
使用np.einsum-
ac = np.einsum('ijk,lj->ilk',a,map_y)
einsum關于這個問題的一些解釋:
軸可以被認為是示意性的,就像這樣 -
a : i x j x k
map_y : l x j
output : i x l x k
因此,j對輸出進行了對齊和總和減少,而其余部分是“spear-out”,為我們提供了所需的輸出。
有關更多信息,請參閱鏈接的文檔。
此外,通過將optimize標志np.einsum設置為True使用 BLAS 來處理標志。
添加回答
舉報
0/150
提交
取消