如何使numpy数组列总和为1

Sim*_*mon 6 python numpy pagerank matrix

我正在构建一个用于实现PageRank算法的转换矩阵.我怎么能使用numpy来确保列加起来一个.

例如:

1 1 1   
1 1 1  
1 1 1
Run Code Online (Sandbox Code Playgroud)

应该归一化为

.33 .33 .33  
.33 .33 .33  
.33 .33 .33
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 12

按列总结划分每列的元素 -

a/a.sum(axis=0,keepdims=1) # or simply : a/a.sum(0)
Run Code Online (Sandbox Code Playgroud)

要使行总和统一,请更改轴输入 -

a/a.sum(axis=1,keepdims=1)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [78]: a = np.random.rand(4,5)

In [79]: a
Out[79]: 
array([[ 0.37,  0.74,  0.36,  0.41,  0.44],
       [ 0.51,  0.86,  0.91,  0.03,  0.76],
       [ 0.56,  0.46,  0.01,  0.86,  0.38],
       [ 0.72,  0.66,  0.56,  0.84,  0.69]])

In [80]: b = a/a.sum(axis=0,keepdims=1)

In [81]: b.sum(0) # Verify
Out[81]: array([ 1.,  1.,  1.,  1.,  1.])
Run Code Online (Sandbox Code Playgroud)

要确保它适用于intPython 2.x的数组,请使用from __future__ import division或使用np.true_divide.


对于添加最多的列 0

对于添加0最多的列,假设我们可以将它们保持原样,我们可以将求和设置为1,而不是除以0,如此 -

sums = a.sum(axis=0,keepdims=1); 
sums[sums==0] = 1
out = a/sums
Run Code Online (Sandbox Code Playgroud)