ste*_*ten 1 python 3d numpy division
我有一个3D numpy数组ary [tbl_idx,rows,cols],它表示多个2D表。我想对每个表中的每一行求和,然后将每个表的每个元素除以相应的行总和。
即每个表都是基于行概率的。
我可以通过以下方式进行行总和:
ary.sum(axis=2).astype(np.float)
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚如何对3Dary / 2D行总和进行正确的除法。
你知不知道怎么 ?
您可以keepdims=1在求和时保留维数,然后简单地进行除法,就像这样-
ary/ary.sum(axis=2, keepdims=1).astype(np.float)
Run Code Online (Sandbox Code Playgroud)
另外,如果您已经保存了求和,我们可以3D通过引入新轴将其扩展到None/np.newaxis,然后执行除法,如下所示-
ary/ary.sum(axis=2).astype(np.float)[...,None]
Run Code Online (Sandbox Code Playgroud)
对于总和zeros,您将在输出的相应位置获得NaNs和Infs。要将其设置为zeros输出中的一种,一种方法是使用np.where-
sums = ary.sum(axis=1,keepdims=1)
out = np.where(sums!=0, ary/sums.astype(np.float),0)
Run Code Online (Sandbox Code Playgroud)
或者,使用较早的代码获取除法输出,最后寻找有限的并将余数设置为zeros-
np.where(np.isfinite(out1), out1,0) # out1 is o/p from earlier section
Run Code Online (Sandbox Code Playgroud)