为什么我会在scipy稀疏列切片上收到警告?

时间:2018-05-11 18:47:46

标签: python performance numpy scipy sparse-matrix

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.

为什么我会收到此警告?

1 个答案:

答案 0 :(得分:2)

这与行与列无关。基本上,你强迫scipy在两个数组的中间插入元素,正如警告所说的那样昂贵。

让我们看一下就地修改之前和之后csr的内部表示,以确认这一点:

<input type="text" name="" value="" id="click">

一些背景知识:压缩的稀疏行和列格式基本上只存储非零值。他们使用向量以打包的方式执行此操作,以按特定顺序存储非零值及其坐标。如果一个操作添加新的非零值,它们通常不能被追加但必须插入,这就是我们在示例中看到的以及它的成本是多少。