R生成稀疏矩阵

在矩阵中,若数值为0的元素数目远远多于非0元素的数目,
并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;
与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。
###### R稀疏矩阵 #####

### 1. Matrix包的Matrix函数
require(Matrix)
# detach("package:Matrix")
mat <- Matrix(data = 0L, nrow=1000, ncol = 100, sparse = TRUE) #dgCMatrix
print(object.size(mat), unit="KB") #1.9 Kb
dim(mat) #[1] 3201  818

## 普通matrix占用空间大得多
mat2 <- matrix(data = 0L, nrow=1000, ncol = 100) #dgCMatrix
class(mat2) # 1] "matrix" "array"
print(object.size(mat2), unit="KB") # 390.8 KbKb


### 2. Matrix::sparseMatrix函数
i <- c(1,5:8)
j <- c(8,2:5)
x <- length(i) * (1:5)
# i,j 为不为0的行,列。 x为值
mat3 <- sparseMatrix(i, j, x = x) # dgCMatrix
mat3[8,1]
summary(mat3)

### 3. matrix转换 as(*, "dgCMatrix")
mat4 <- matrix(data=c(0,0,1,2,0,3,0,0,0), nrow=3, ncol=3) 
mat5 <- as(mat4, "dgCMatrix") # dgCMatri

### 4. new("dgCMatrix", ...),...处填写dgCMatrix类的属性具体值
# 虽然R是统计语言,但R也可以面向对象编程。S4对象是标准的面向对象实现方式,
# 有专门的类定义函数setClass()和类的实例化函数new()。
# "dgCMatrix" 本质上就是一个类,所以我们可以直接用new函数来实例化这个类创建对象。
indptr <-  c(2L, 0L, 2L) #必为整数
indices <- c(0L, 1L, 3L, 3L) #必为整数
data <- c(1, 2, 3)
mat6 <- new('dgCMatrix', i=indptr, p=indices, x=data, Dim=c(3L,3L))  #Dim参数必为整数

### 5. 稀疏矩阵读取和保存
# Matrix::readMM #读取稀疏矩阵
# Matrix::writeMM #保存稀疏矩阵
writeMM(mat6, file=file.path(tempdir(), "mat6.mtx"))
mat7 <- Matrix::readMM(file=file.path(tempdir(), "mat6.mtx"))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值