2017-01-19 6 views
1

私は、複数の2Dテーブルを表す3次元配列の配列[tbl_idx、rows、cols]を持っています。 私はすべてのテーブルのすべての行を合計し、対応する行合計ですべてのテーブルのすべての要素を分割します。3D配列を2D行の合計で分割しますか?

I.e.すべてのテーブルが行確率ベースます。..

私は次のように行の合計を行うことができます。

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

が、正しい除算3D進/ 2D-を行う方法を見つけ出すことはできません行合計

あなたは知っていますか?

答えて

3

あなたは合計しながら次元数を維持するためにkeepdims=1を使用して、単純に、除算を行うので、などの可能性 - すでに総和が保存されている場合、我々はによって3Dにそれを拡張することができ、

ary/ary.sum(axis=2, keepdims=1).astype(np.float) 

またNone/np.newaxisと新しい軸を導入した後、除算を実行し、そうのような - summatioについて

ary/ary.sum(axis=2).astype(np.float)[...,None] 

nsがzerosの場合、出力の対応する位置にNaNsInfsが表示されます。分割出力を得るために、以前のコードを使用し、また

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 
出力に zerosとしてそれらを設定するには、一つの方法は、 np.whereを使用することです
+0

超クール;)、すべてのナノとinfにゼロに設定する方法があります。私は操作の前に1を加えることができるが、ショートカットがあるかどうか疑問に思っていた。 – user1019129

+0

私はこれを行いました:ary [np.isnan(ary)] = 0.私の主な質問に感謝したので、質問を終了します。 – user1019129

関連する問題