0
我有一个scipy形式的大型稀疏矩阵coo_matrix
(大小为5GB)。我必须利用矩阵的非零条目并做一些进一步的处理。Scipy处理大型COO矩阵
访问矩阵元素的最佳方式是什么?我应该将矩阵转换为其他格式还是原样使用它?另外,你能否告诉我访问coo_matrix
元素的确切语法?我有点困惑,因为它不允许切片。
我有一个scipy形式的大型稀疏矩阵coo_matrix
(大小为5GB)。我必须利用矩阵的非零条目并做一些进一步的处理。Scipy处理大型COO矩阵
访问矩阵元素的最佳方式是什么?我应该将矩阵转换为其他格式还是原样使用它?另外,你能否告诉我访问coo_matrix
元素的确切语法?我有点困惑,因为它不允许切片。
首先,让我们建立一个随机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以获得更多关于不同稀疏数组格式的特性的信息 - 格式的合适选择实际上取决于你计划如何处理数组。
非常感谢! :) – AnotherCodingEnthusiast