2014-06-30 58 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