【发布时间】:2016-11-09 12:44:36
【问题描述】:
我有一个 csr_matrix,假设我调用了:
import scipy.sparse as ss
mat = ss.csr.csr_matrix((50, 100))
现在我想修改这个矩阵上的一些值。我打电话:
mat[0,1]+=1
我得到:
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
我只需要在创建矩阵之后设置几个值(最后以矩阵的比例)。稍后我将只读取列或对整个矩阵进行元素操作(如.log1p())
这样做的正确方法是什么?目前我可以忽略警告,但可能有更好的方法,不会产生警告。
【问题讨论】:
-
CSR 和 CSC 是快速线性代数计算的首选格式。您通常将矩阵构建为 COO、LIL 或 DOK,仅将其转换为 CSC 或 CSR 一次,然后对其进行昂贵的数学运算。这将有助于更好地理解您的用例:您想对矩阵做什么?您是否需要在昂贵的操作之间添加新数据,或者可以在一开始就批量添加?
-
已编辑,希望更清楚。
-
创建一个COO matrix,向其中添加值,然后将其转换为 CSC 或 CSR 矩阵(如果您的操作有速度优势)。如果您所追求的只是元素操作,那么首席运营官可能会很好。如果要提取列选择 CSC,如果行 CSR。
标签: python scipy sparse-matrix