R稀疏矩阵在简单算术后存储零(矩阵库)

R sparse matrix stores zeros after simple arithmetic (Matrix library)

我有以下 [10 x 10] 稀疏矩阵:

library(Matrix)
m = as(diag(10), 'sparseMatrix')
m
10 x 10 sparse Matrix of class "dgCMatrix"
[1,] 1 . . . . . . . . .
[2,] . 1 . . . . . . . .
[3,] . . 1 . . . . . . .
[4,] . . . 1 . . . . . .
[5,] . . . . 1 . . . . .
[6,] . . . . . 1 . . . .
[7,] . . . . . . 1 . . .
[8,] . . . . . . . 1 . .
[9,] . . . . . . . . 1 .
[10,] . . . . . . . . . 1

如果我对此进行简单的算术运算,它现在会存储所有的零。

M = m + 1 - 1
M
10 x 10 Matrix of class "dgeMatrix"
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    0    0    0    0    0    0    0    0     0
 [2,]    0    1    0    0    0    0    0    0    0     0
 [3,]    0    0    1    0    0    0    0    0    0     0
 [4,]    0    0    0    1    0    0    0    0    0     0
 [5,]    0    0    0    0    1    0    0    0    0     0
 [6,]    0    0    0    0    0    1    0    0    0     0
 [7,]    0    0    0    0    0    0    1    0    0     0
 [8,]    0    0    0    0    0    0    0    1    0     0
 [9,]    0    0    0    0    0    0    0    0    1     0
[10,]    0    0    0    0    0    0    0    0    0     1

我知道我可以让这个新矩阵变得稀疏,但是有什么办法可以让 R 自动做到这一点吗?

M = as(M, 'sparseMatrix')

它计算 m+1-1 因为 (m+1)-1m+1 不是稀疏的,所以从那时起你就没有稀疏矩阵了。

尝试m+(1-1)