我有一个3D numpy数组ary [tbl_idx,rows,cols],它代表多个2D表。 我想对每个表中的每一行求和,然后将每个表的每个元素除以相应的行和。
即。每个表都是基于行概率的..
我可以通过以下方式进行行和:
ary.sum(axis=2).astype(np.float)
但无法弄清楚如何正确划分3D-ary / 2D-row-sum。
你知道吗?
答案 0 :(得分:4)
你可以使用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
的摘要,您会在输出中的correspoding位置获得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