gpt4 book ai didi

python - 向 csr_matrix 添加元素的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:58:33 25 4
gpt4 key购买 nike

我有一个 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())

正确的做法是什么?目前我可以忽略警告,但可能有更好的方法,它不会产生警告。

最佳答案

您可以控制警告的外观。默认设置是在运行期间显示一次,然后保持静音。您可以将其更改为引发错误、完全静音或每次都发出警告。

创建稀疏矩阵的常用方法是创建 3 个 coo 样式数组,所有值都非零。然后制作一个coo矩阵,或者直接csr(它采用相同的输入方式)。

coo 格式没有索引,所以无论如何您都不能执行 M[i,j]=1。但是 csr 确实实现了它。我认为警告是为了阻止多个更改(在循环中)而不是一个或两个。

改变 csr 矩阵的稀疏性需要重新计算整个属性集(数据和索引指针)。这就是为什么它很贵。我没有做计时,但它可能几乎与使阵列新鲜一样昂贵。

lil 应该更适合增量赋值。它将数据保存在列表的列表中,并且将值插入列表的速度很快。但是将 csr 转换为 lil 并返回需要时间,所以我不会只做一些添加。

关于python - 向 csr_matrix 添加元素的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com