2014-06-30 94 views
0

我有一個scipy形式的大型稀疏矩陣coo_matrix(大小爲5GB)。我必須利用矩陣的非零條目並做一些進一步的處理。Scipy處理大型COO矩陣

訪問矩陣元素的最佳方式是什麼?我應該將矩陣轉換爲其他格式還是原樣使用它?另外,你能否告訴我訪問coo_matrix元素的確切語法?我有點困惑,因爲它不允許切片。

回答

1

首先,讓我們建立一個隨機COO矩陣:

import numpy as np 
from scipy import sparse 

x = sparse.rand(10000, 10000, format='coo') 

非零值在矩陣的.data屬性中找到,你可以得到其相應的行/使用x.nonzero()列索引:

v = x.data 
r, c = x.nonzero() 

print np.all(x.todense()[r, c] == v) 
# True 

使用COO矩陣,可以使用getrow()/getcol()方法爲單行或列索引(作爲稀疏向量)。如果您想對特定元素進行切片或花式索引,則需要將其轉換爲另一種格式,例如lil_matrix,例如使用.tolil()方法。

你應該真的閱讀scipy.sparse docs以獲得更多關於不同稀疏數組格式的特性的信息 - 格式的合適選擇實際上取決於你計劃如何處理數組。

+0

非常感謝! :) – AnotherCodingEnthusiast