我有一个大的稀疏矩阵,形式为scipy coo_matrix
(大小为5GB)。我必须使用矩阵的非零条目并进行进一步处理。
访问矩阵元素的最佳方法是什么?我应该将矩阵转换为其他格式还是按原样使用?另外,您能告诉我访问coo_matrix
元素的确切语法吗?我有点困惑,因为它不允许切片。
答案 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以获取有关不同稀疏数组格式功能的更多信息 - 适当的格式选择实际上取决于您对阵列的计划。