我有一个计数矩阵,
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 one liner最好。
另外,
def percentages(a):
return a / np.sum(a)
x_percentages = np.apply_along_axis(percentages,1,x)
但这仍然涉及python。
np.linalg.norm
就发生的事情来说非常接近,但它们只有8个硬编码规范,其中不包括总数的百分比。
然后有np.percentile
,它再次关闭......但它正在计算已排序的百分位数。
答案 0 :(得分:9)
x /= x.sum(axis=1, keepdims=True)
Altough x
应该有一个浮点dtype,以使其正常工作。
更好的可能是:
x = np.true_divide(x, x.sum(axis=1, keepdims=True))
答案 1 :(得分:2)
这可能是你想要的:
print (x.T/np.sum(x, axis=1)).T