如何在不更改稀疏性的情况下将稀疏科学矩阵的切片乘以常数

时间:2019-01-11 14:27:15

标签: python scipy sparse-matrix multiplication

每当我将稀疏矩阵的一个切片乘以一个常数后,我就会失去矩阵的稀疏性,因为Scipy开始为每个空条目计算0 * constant,然后用{{1}填充所有空条目}。真傻我该如何阻止它呢?索引必须是整数或布尔值。他们不能使用0

例如

:

结果

A = scipy.sparse.csr_matrix([[0, 1], [0, 0]])
print(A, '/n' )

A[[0,0],[0,1]] *= -1
print(A)

A的大小应该没有改变。

编辑: 由于目前尚不清楚我要实现的目标,我想将一个稀疏矩阵中的多个元素乘以一个常数,而又不损失该矩阵的稀疏性,而不必求助于比线性运算更昂贵的运算。非零元素个数,即使用稀疏结构。因此,也不必复制整个稀疏矩阵,这意味着乘法必须就位。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

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)