将 3D 数组除以 2D 行总和?
Dividing 3D array by 2D row sums?
我有一个 3D numpy 数组 ary[tbl_idx, rows, cols],它表示多个 2D table。
我想对每个 table 中的每一行求和,然后将每个 table 的每个元素除以相应的行总和。
即每个 table 都是基于行概率的..
我可以按以下方式进行行求和:
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
我有一个 3D numpy 数组 ary[tbl_idx, rows, cols],它表示多个 2D table。 我想对每个 table 中的每一行求和,然后将每个 table 的每个元素除以相应的行总和。
即每个 table 都是基于行概率的..
我可以按以下方式进行行求和:
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