Skip to main content
 首页 » 编程设计

python之将 3D 数组除以 2D 行总和

2025年05月04日24soundcode

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

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

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

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

但不知道如何进行正确的除法 3D-ary/2D-row-sums。

你知道怎么做吗?

请您参考如下方法:

您可以使用 keepdims=1 在求和时保持维数,然后简单地执行除法,就像这样 -

ary/ary.sum(axis=2, keepdims=1).astype(np.float) 

或者,如果您已经保存了求和,我们可以通过使用 None/np.newaxis 引入新轴将其扩展到 3D,然后执行除法,像这样 -

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) 

或者,使用前面的代码获取除法输出,最后寻找有限个并将 rest 设置为 zeros -

np.where(np.isfinite(out1), out1,0) # out1 is o/p from earlier section