1不是零的稀疏矩阵

问题描述

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

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

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


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

解决方法

我认为,如果不自己进行编码,就不可能做到这一点(例如,编写将密集矩阵与常见稀疏矩阵表示形式(例如compressed sparse column)相互转换的函数)。大多数现有的稀疏矩阵表示都经过了优化,以假定“可忽略”元素为零,因为这绝对是科学计算中最常见的用例。

我要说的是您可以改编Matrix包中的代码,但是此转换代码深深地埋在C代码中,并调用CHOLMOD例程...)其他稀疏矩阵包之一,例如spam软件包可能是一个更好的起点。