1
我有一個3D numpy數組ary [tbl_idx,rows,cols],它代表多個2D表格。 我想對每個表中的每一行進行求和,然後將每個表的每個元素除以相應的行和。用三維數組劃分三維數組?
I.e.每個表是基於行的概率..
我可以做下面的方式行和:
ary.sum(axis=2).astype(np.float)
,但無法弄清楚如何做正確的劃分3D元/ 2D-行總和。
你知道嗎?
我有一個3D numpy數組ary [tbl_idx,rows,cols],它代表多個2D表格。 我想對每個表中的每一行進行求和,然後將每個表的每個元素除以相應的行和。用三維數組劃分三維數組?
I.e.每個表是基於行的概率..
我可以做下面的方式行和:
ary.sum(axis=2).astype(np.float)
,但無法弄清楚如何做正確的劃分3D元/ 2D-行總和。
你知道嗎?
你可以使用keepdims=1
保持維度的數量,同時總結,然後簡單地進行劃分,像這樣 -
ary/ary.sum(axis=2, keepdims=1).astype(np.float)
或者,如果你已經擁有的總和保存的,我們可以通過它擴大到3D
引入新的軸線與None/np.newaxis
然後執行除法,像這樣 -
ary/ary.sum(axis=2).astype(np.float)[...,None]
對於summatio ns爲zeros
,則輸出中的對應位置將得到NaNs
和Infs
。設置這些爲zeros
輸出,一個方法是使用np.where
-
sums = ary.sum(axis=1,keepdims=1)
out = np.where(sums!=0, ary/sums.astype(np.float),0)
或者,使用前面的代碼來獲得分配輸出,最後尋找有限的人,並設置其餘爲zeros
-
np.where(np.isfinite(out1), out1,0) # out1 is o/p from earlier section
超級酷;),是否有一些方法來設置爲零所有nan和inf。我可以在手術前加1,但想知道是否有捷徑。 – user1019129
我做到了這一點:ary [np.isnan(ary)] = 0.將結束這個問題,因爲你回答了我的主要問題,謝謝。 – user1019129