我正在實現一些迭代算法來計算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