我正在嘗試添加兩個不同維度的陣列。陣列 A 的形狀為 (20,2,2,2,2,3),陣列 B 的形狀為 (20)。目前,我使用 np.newaxis 5 次,所以 B 得到與 A 相同的形狀,然后我添加它們。在我的實際代碼中,A 要大得多,這迫使我多次撰寫 np.newaxis。有沒有辦法避免重復 np.newaxis 并告訴 python 給 B 與 A 相同的形狀?
A = np.zeros([20,2,2,2,2,3])
B = np.arange(1,21)
B = B[:,np.newaxis,np.newaxis,np.newaxis,np.newaxis,np.newaxis]
C = A B
uj5u.com熱心網友回復:
如果您正在廣播,這將起作用:
A= np.zeros([20,2,2,2,2,3])
B = np.arange(1,21)
B = B.reshape([20,1,1,1,1,1])
C = A B
以更動態的方式:
shape_a = [20,2,2,2,2,3]
A= np.zeros(shape_a)
B = np.arange(1,21)
shape_b = [shape_a[0]] (len(shape_a)-1)*[1]
B = B.reshape(shape_b)
C = A B
沒有廣播:
A = np.zeros([20,2,2,2,2,3])
B = np.arange(1,21)
C = A.copy()
C[:,0,0,0,0,0] = B
如果你不關心 A,只關心結果:
C = np.zeros([20,2,2,2,2,3])
B = np.arange(1,21)
C[:,0,0,0,0,0] = B
uj5u.com熱心網友回復:
你所做的是廣播到 的維數A,但是如果你仔細看,你所做B的這個操作并沒有與 具有相同的形狀A。事實上,它們仍然不同:
>>> B[:, None, None, None, None, None].shape
(20, 1, 1, 1, 1, 1)
所以這基本上是應用np.expand_dims了五次。另一種方法是用額外的單例重塑陣列:
>>> B.reshape((-1, *(1,)*(A.ndim-1))).shape
(20, 1, 1, 1, 1, 1)
這將重塑(*,)為(*, 1, 1, 1, 1, 1). np.newaxis這與手動放置具有相同的效果。
uj5u.com熱心網友回復:
對于您的情況,您還可以執行以下操作:
C = (A.reshape(A.shape[0], -1) B[:,None]).reshape(A.shape)
或者將公共軸交換到末尾:
C = (A.swapaxes(0,-1) B).swapaxes(0,-1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490674.html
上一篇:在Google表格中的日期串列之間自動填充日期并鏈接到其他列
下一篇:使用兩個屬性對陣列元素進行分組
