我正在实现一些迭代算法来计算webgraph的PageRank,而且我在寻找存储内存矩阵的最佳方法时遇到了一些麻烦。PageRank计算矩阵向量乘积的稀疏矩阵
我有一个B
n x n
矩阵,其rappresents的webgraph(B[i,j]=1/outdegree[j]
如果有从j
到i
电弧,0
否则; outdegree[j]
是传出弧的从节点j
数),并且我存储作为scipy.sparse.dok_matrix
因为当然它主要有0
条目。问题是我必须计算类型Px
,其中
P = B + (1/n)*e*d^T
其中e
是所有那些矢量和d
是具有1
在组分j
如果outdegree[j] > 0
一个布尔矢量的许多矩阵X向量积。基本上e*d^T
是排序的线性代数“特技”的写n x n
矩阵的列或者全部由1
S或0
S,取决于如果在d
相应的条目是1
或0
。
所以我有两个挣扎,不是完全独立的,事情:
- 如何实现numpy的同样的“猫腻”,因为
e*d.T
简单地计算标产品,而我想要的矩阵。我想这是一些巧妙的广播和切片使用,但我仍然是新的numpy,并不能解决它 - 如果我只是定义
P
如上(假设我已找到解决方案1),我松散的存储优势,我获得存储B
作为稀疏矩阵,突然我需要存储n^2
浮游物。无论如何,我添加到B
的矩阵非常多余(只有两种类型的列),所以必须有比存储整个矩阵更好的方法。有什么建议么?请记住,它是在一个方式,很容易让的P.dot(x)
计算,为x
任意向量
如果您可以添加一些代码来生成适当形状/类型的示例输入变量(B,d,e等),将会有所帮助。 – YXD