2017-04-26 30 views
2

我正在构建实现​​PageRank算法的转换矩阵。我如何使用numpy来确保列合计一个。如何使numpy数组列的总和达到1

例如:

1 1 1 
1 1 1 
1 1 1 

应被归一化是

.33 .33 .33 
.33 .33 .33 
.33 .33 .33 

回答

5

除以它们的列求和的每列的元素 -

a/a.sum(axis=0,keepdims=1) # or simply : a/a.sum(0) 

为了使行向求和统一,改变轴输入 -

a/a.sum(axis=1,keepdims=1) 

采样运行 -

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.]) 

,以确保它的工作原理上int阵列以及为Python 2.x中,使用from __future__ import division或使用np.true_divide