如何有效删除R中稀疏矩阵中的块

时间:2019-03-21 10:55:35

标签: r matrix sparse-matrix

我有一个大的稀疏矩阵(大约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快了一点,但还没有我喜欢的快。有什么想法可以更有效地实现吗?

0 个答案:

没有答案