我有一个3D numpy数组ary [tbl_idx,rows,cols],它表示多个2D表。我想对每个表中的每一行求和,然后将每个表的每个元素除以相应的行总和。
即每个表都是基于行概率的。
我可以通过以下方式进行行总和:
ary.sum(axis=2).astype(np.float)
但无法弄清楚如何对3Dary / 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]
对于总和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