1
我有一个3D numpy数组ary [tbl_idx,rows,cols],它代表多个2D表格。 我想对每个表中的每一行进行求和,然后将每个表的每个元素除以相应的行和。用三维数组划分三维数组?
I.e.每个表是基于行的概率..
我可以做下面的方式行和:
ary.sum(axis=2).astype(np.float)
,但无法弄清楚如何做正确的划分3D元/ 2D-行总和。
你知道吗?
我有一个3D numpy数组ary [tbl_idx,rows,cols],它代表多个2D表格。 我想对每个表中的每一行进行求和,然后将每个表的每个元素除以相应的行和。用三维数组划分三维数组?
I.e.每个表是基于行的概率..
我可以做下面的方式行和:
ary.sum(axis=2).astype(np.float)
,但无法弄清楚如何做正确的划分3D元/ 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]
对于summatio ns为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
超级酷;),是否有一些方法来设置为零所有nan和inf。我可以在手术前加1,但想知道是否有捷径。 – user1019129
我做到了这一点:ary [np.isnan(ary)] = 0.将结束这个问题,因为你回答了我的主要问题,谢谢。 – user1019129