2017-01-19 50 views
1

我有一個3D numpy數組ary [tbl_idx,rows,cols],它代表多個2D表格。 我想對每個表中的每一行進行求和,然後將每個表的每個元素除以相應的行和。用三維數組劃分三維數組?

I.e.每個表是基於行的概率..

我可以做下面的方式行和:

ary.sum(axis=2).astype(np.float) 

,但無法弄清楚如何做正確的劃分3D元/ 2D-行總和。

你知道嗎?

回答

3

你可以使用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,則輸出中的對應位置將得到NaNsInfs。設置這些爲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 
+0

超級酷;),是否有一些方法來設置爲零所有nan和inf。我可以在手術前加1,但想知道是否有捷徑。 – user1019129

+0

我做到了這一點:ary [np.isnan(ary)] = 0.將結束這個問題,因爲你回答了我的主要問題,謝謝。 – user1019129