大型COO矩阵的Scipy处理

时间:2014-06-30 13:41:59

标签: python numpy matrix scipy sparse-matrix

我有一个大的稀疏矩阵,形式为scipy coo_matrix(大小为5GB)。我必须使用矩阵的非零条目并进行进一步处理。

访问矩阵元素的最佳方法是什么?我应该将矩阵转换为其他格式还是按原样使用?另外,您能告诉我访问coo_matrix元素的确切语法吗?我有点困惑,因为它不允许切片。

1 个答案:

答案 0 :(得分: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以获取有关不同稀疏数组格式功能的更多信息 - 适当的格式选择实际上取决于您对阵列的计划。