在使用大型SciPy CSR稀疏矩阵时,我注意到切割矩阵以从矩阵中获取单行非常慢,因为它似乎可以复制。
有没有办法制作一个稀疏矩阵,它接受现有行的引用而不是复制它,或许有一个比CSR矩阵更合适的实现?
我的实现需要的是快速查找元素和行以及快速查找向量的所有非零索引。我永远不需要以任何方式更改矩阵或对矩阵执行其他操作。
答案 0 :(得分:0)
您可以利用CSR表示直接对基础数组进行切片,并使用新的CSR矩阵共享数据:
mat = # some CSR matrix
i = # the index of whatever row you want
start, stop = mat.indptr[i], mat.indptr[i+1]
noncopy_row_i = scipy.sparse.csr_matrix((mat.data[start:stop],
mat.indices[start:stop],
numpy.array([0, stop-start])),
shape=(1, mat.shape[1]))
答案 1 :(得分:0)
Numpy支持不同类型的os sparces矩阵:https://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information
可能coo_matrix
会提供更快的元素查找,但您也可以放弃其他一些操作。我认为最好的方法是对您的数据和算法进行基准测试。