如何将一个numpy数组行除以该行中所有值的总和?

这是一个例子。但是我很确定有一种花哨且更有效的方法:

import numpy as np
e = np.array([[0., 1.],[2., 4.],[1., 5.]])
for row in xrange(e.shape[0]):
    e[row] /= np.sum(e[row])

结果:
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

最佳答案

方法1:使用None(或np.newaxis)添加一个额外的维度,以便广播能够正常运行:

>>> e
array([[ 0.,  1.],
       [ 2.,  4.],
       [ 1.,  5.]])
>>> e/e.sum(axis=1)[:,None]
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

方法2:快乐地转置:
>>> (e.T/e.sum(axis=1)).T
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

(如果需要,您可以删除axis=部分以获得简洁性。)

方法3 :(根据Jaime的评论进行推广)

keepdims上使用sum参数保留尺寸:
>>> e/e.sum(axis=1, keepdims=True)
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

关于python - numpy逐行求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16202348/

10-11 22:12
查看更多