当前位置:  开发笔记 > 编程语言 > 正文

将3D数组除以2D行总和?

如何解决《将3D数组除以2D行总和?》经验,为你挑选了1个好方法。

我有一个3D numpy数组ary [tbl_idx,rows,cols],它表示多个2D表。我想对每个表中的每一行求和,然后将每个表的每个元素除以相应的行总和。

即每个表都是基于行概率的。

我可以通过以下方式进行行总和:

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

但无法弄清楚如何对3Dary / 2D行总和进行正确的除法。

你知不知道怎么 ?



1> Divakar..:

您可以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,您将在输出的相应位置获得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

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有