scipy稀疏的csr_matrix文档说明这种矩阵对于行切片是有效的。使用此代码:
import numpy as np
from scipy import sparse
dok = sparse.dok_matrix((5,1))
dok[1,0] = 1
data = np.array([0,1,2,3,4])
row = np.array([0,1,2,3,4])
col = np.array([0,1,2,3,4])
csr = sparse.csr_matrix((data, (row, col)))
csr[:, 0] += dok
我收到了这个警告:
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
为什么我会收到此警告?
答案 0 :(得分:2)
这与行与列无关。基本上,你强迫scipy在两个数组的中间插入元素,正如警告所说的那样昂贵。
让我们看一下就地修改之前和之后csr的内部表示,以确认这一点:
<input type="text" name="" value="" id="click">
一些背景知识:压缩的稀疏行和列格式基本上只存储非零值。他们使用向量以打包的方式执行此操作,以按特定顺序存储非零值及其坐标。如果一个操作添加新的非零值,它们通常不能被追加但必须插入,这就是我们在示例中看到的以及它的成本是多少。