我有一个大的稀疏矩阵(大约1000万行,10000列,每行大约20个非零条目),并且我想有效地删除其中的某些块,其中一个块由行列表组成(1000到100000)和列列表(1到100)。
我尝试了两种方法,下面是一些示例代码:
library(Matrix)
# given (random) sparse matrix
M <- sparseMatrix(i = sample(1:1000, 2000, replace=TRUE),
j = sample(1:1000, 2000, replace=TRUE),
dims=c(1000, 1000))
# given rows and columns to delete
to_del_row <- 1:20
to_del_col <- 1:10
# option 1:
row_sparse <- sparseMatrix(i=to_del_row, j=rep(1, length(to_del_row)), dims=c(1000, 1))
M[, to_del_col] <- M[, to_del_col] & !row_sparse[, 1]
# option 2:
row_sparse <- sparseMatrix(i=to_del_row, j=rep(1, length(to_del_row)), dims=c(1000, 1))
col_sparse <- sparseMatrix(i=rep(1, length(to_del_col)), j=to_del_col, dims=c(1, 1000))
to_del <- row_sparse %*% col_sparse
M[which(to_del, arr.ind = TRUE)] <- FALSE
选项1对稀疏矩阵不利,因为!稀疏矩阵不是很稀疏。选项2快了一点,但还没有我喜欢的快。有什么想法可以更有效地实现吗?