在二维数组中沿轴计算Numpy百分比

4

我有一个计数矩阵,

import numpy as np
x = np.array([[ 1,2,3],[1,4,6],[2,3,7]])

我需要在轴向为1时计算总和的百分比:
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        x[i,j] = x[i,j] / np.sum(x[i,:])

在numpy广播形式中。
目前,我有:
x_sums = np.sum(x,axis=1)
for j in range(x.shape[1]):
     x[:,j] = x[:,j] / x_sums[:]

这意味着大部分复杂性都在numpy代码中... 但是,numpy一行代码最好。

另外,

def percentages(a):
    return a / np.sum(a)

x_percentages = np.apply_along_axis(percentages,1,x)

但这仍然涉及到Python。


 np.linalg.norm

就正在进行的事情而言,它们非常接近,但它们只有8个硬编码的规范,其中不包括总百分比。

然后有一个np.percentile,再次接近……但它计算的是排序百分位数。

2个回答

12
x /= x.sum(axis=1, keepdims=True)

虽然为了正确运行,x 应该具有浮点数数据类型。

更好的方法可能是:

x = np.true_divide(x, x.sum(axis=1, keepdims=True))

不错!我认为这就可以了。谢谢。 - Chris

2
这可能是您需要的内容:

这是您想要的吗:

print (x.T/np.sum(x, axis=1)).T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接