1 的稀疏矩阵(不是零)

sparse matrix of ones (not zeroes)

我想将包含很多矩阵的矩阵更改为稀疏矩阵。是否有程序化解决方案?

我想避免将 1 转换为 0,反之亦然,因为这会使事情变得比应有的更复杂(然后我需要进行复杂的转换步骤)。

data <- rnorm(1e6)
zero_index <- sample(1e6)[1:9e5]
data[zero_index] <- 1


Matrix::Matrix(as.matrix(data, sparse = TRUE))
 

我认为如果不自己编写代码是不可能的(即编写函数将密集矩阵与常见的 sparse-matrix 表示形式之一相互转换,例如 compressed sparse column)。大多数现有 sparse-matrix 表示都经过大量优化,以假设 'ignorable' 元素为零,因为这是科学计算中最常见的用例。

我本来想说你可以修改 Matrix 包中的代码,但这个转换代码深藏在 C 代码中并调用 CHOLMOD 例程...)另一个 sparse-matrix 包,例如spam 包,可能是一个更好的起点。