use*_*940 0 r machine-learning sparse-matrix
我想从例如稀疏矩阵的第i行的非零值中减去矢量的第i个值
[,1] [,2] [,3] [,4]
[1,] 0 0 4 0
[2,] 0 5 0 3
[3,] 1 2 0 0
Run Code Online (Sandbox Code Playgroud)
这是我试图减去的向量:
[1] 1 2 3
Run Code Online (Sandbox Code Playgroud)
所以我最终需要的是:
[,1] [,2] [,3] [,4]
[1,] 0 0 3 0
[2,] 0 3 0 1
[3,] -2 -1 0 0
Run Code Online (Sandbox Code Playgroud)
我试过这个使用申请,但一直无法解决问题,它并没有让我回想起我想要的东西.矩阵的尺寸太大,我不想使用循环.感谢致敬.
由于逐列地执行从矩阵中减去矢量,mat-vec所以进行必要的减法.因为你只想在原始矩阵非零时使用它(并且对于原来为0的元素返回0),你可以乘以mat != 0,这是一个1/0(TRUE/FALSE)矩阵,说明原始元素是否非零.
(mat - vec) * (mat != 0)
# [,1] [,2] [,3] [,4]
# [1,] 0 0 3 0
# [2,] 0 3 0 1
# [3,] -2 -1 0 0
Run Code Online (Sandbox Code Playgroud)
如果您想要为稀疏矩阵执行此操作:
library(Matrix)
(mat <- sparseMatrix(i=c(3, 2, 3, 1, 2), j=c(1, 2, 2, 3, 4), x=c(1, 5, 2, 4, 3)))
# 3 x 4 sparse Matrix of class "dgCMatrix"
# [1,] . . 4 .
# [2,] . 5 . 3
# [3,] 1 2 . .
vec <- c(1, 2, 3)
mat@x <- mat@x - vec[mat@i+1]
mat
# 3 x 4 sparse Matrix of class "dgCMatrix"
# [1,] . . 3 .
# [2,] . 3 . 1
# [3,] -2 -1 . .
Run Code Online (Sandbox Code Playgroud)