我試圖實現使用SciPy的的稀疏包下面的公式:執行總和
W = x[:,1] * y[:,1].T + x[:,2] * y[:,2].T + ...
其中x & y是一個n×m的csc_matrix。基本上我想把y的每一列乘以y的每一列,並將得到的n×n矩陣求和在一起。然後我要讓所有非零元素1.
這是我目前實施:
c = sparse.csc_matrix((n, n))
for i in xrange(0,m):
tmp = bam.id2sym_thal[:,i] * bam.id2sym_cort[:,i].T
minimum(tmp.data,ones_like(tmp.data),tmp.data)
maximum(tmp.data,ones_like(tmp.data),tmp.data)
c = c + tmp
此實現具有以下問題:
內存使用率似乎要爆炸。據我瞭解,內存應該只會增加,因爲C變得稀疏,但我看到循環開始吞噬> 20GB的內存與= 10,000,M = 100,000(每行x & y只有大約60非 - 零元素)。
我正在使用一個不是很有效的python循環。
我的問題:有沒有更好的方法來做到這一點?控制內存使用率是我首先關心的問題,但讓它變得更快就太好了!
謝謝!
'x [:,i]'會給你'x'的第i列,而不是行 – JoshAdel
@JoshAdel:你是對的,我錯過了,我的意思是說乘以列的x年。我已經更新了這個問題。謝謝! – RussellM
您的等式是內部產品的總和,而不是外部產品。你必須調換'y'的列,而不是'x'。 (或者那個,或者標題是錯誤的。) –