python - 如何在不改变稀疏度的情况下将稀疏 scipy 矩阵的切片乘以常数
问题描述
每当我将稀疏矩阵的切片乘以一个常数时,我就会失去矩阵的稀疏性,因为 Scipy 开始计算0 * constant
每个空条目,然后用0
. 这是愚蠢的。我该如何阻止它这样做?索引需要是整数或布尔值。他们不能使用:
.
所以例如
A = scipy.sparse.csr_matrix([[0, 1], [0, 0]])
print(A, '/n' )
A[[0,0],[0,1]] *= -1
print(A)
结果是
(0, 1) 1
(0, 0) 0
(0, 1) -1
A 的大小不应该改变。
编辑:由于似乎不清楚我要实现什么,我想将稀疏矩阵中的许多元素乘以一个常数,而不会失去该矩阵的稀疏性,也不必诉诸比线性更昂贵的操作在该数量的元素中的数量非零元素中,即使用稀疏结构。所以也没有复制整个稀疏矩阵,这意味着乘法必须到位。
解决方案
你可以试试:
A[0, 1] *= -1
然后
print(A)
产量
(0, 1) -1
或者,至少在这种情况下,简单地
print(A * (-1))
产生相同的输出:
(0, 1) -1
通过做
A[[0,0],[0,1]]
您选择零条目,然后填充;如果您只选择一个非零条目,如上所示,它将按预期工作。
from scipy.sparse import csr_matrix
A = csr_matrix([[0, 1], [5, 0]])
现在你可以简单地做
print(A * (-1))
(0, 1) -1
(1, 0) -5
您还可以通过传递元组来修改特定条目
A[(0, 1), (1, 0)] *= -1
print(A)
还将返回所需的输出:
(0, 1) -1
(1, 0) -5
显然,如果您想更改所有非零条目,我会选择
A * (-1)
推荐阅读
- kibana - 上传任意 XYZ 坐标来开发我自己的非地球地图?
- javascript - 更新一个字段以进一步嵌套在文档中 - MongoDB/Node
- python - 根据值数组在数据框中过滤
- javascript - 使用 Apollo 客户端和 React 自定义 useMutation 钩子
- javascript - Typescript : Es6 Map TS Type Relation
- windows - 如何从键盘/宏键盘发送“SendMessage”?
- mysql - 如何检查插入触发器中的字段是否为空?
- laravel - Laravel:如何在具有多对多模型关系的模型上添加条件子句?
- android - windowSplashScreenAnimationDuration 有什么作用?
- mongodb - 同时增加文档和嵌套数组中的值(使用 upsert)