[英]Matlab's sparse(i,j,s,m,n) equivalent in R
我正在和R.一起工作
我有一个矩阵结构,但存储在三个列表IND1,IND2和VAL中,每个列表长度为N; 我需要将VAl中的值存储在矩阵MAT中,以便:
for each i in 1 to N:
MAT[IND1(i), IND2(i)] == VAL(i)
你可以猜到MAT的最终大小不一定是NxN,但是我知道大小必须是什么(如果你需要知道大小,可以称之为m,因为对我来说它必须是方阵)。
Matlab有一个很好的功能来创建一个稀疏的矩阵,完成这个,但我需要在语言R中完成这个,希望没有循环,有人知道这是否可以完成,请告诉我如何。 提前致谢。
PS:我已经尝试过显而易见的事了:
MAT <- matrix(nrow=m, ncol=m)
MAT[IND1, IND2] <- VAL
但我得到一个奇怪的结果(所有行都有相同的重复值)
DWin是对的 - Matrix包是要走的路。 但是,如果您有大量数据,我发现替换类型的值替换可能会挂起或需要很长时间。 更好的方法可能是创建一个类sparseMatrix对象,然后根据需要转换为类矩阵。 防爆。
set.seed(1)
n=50
x <- sample(seq(100), n)
y <- sample(seq(100), n)
z <- runif(n)
cbind(x,y,z)
library(Matrix)
s.mat <- sparseMatrix(i=x, j=y, x=z)
dim(s.mat)
image(s.mat)
#convert to a class matrix if needed
mat <- as.matrix(s.mat)
mat[which(mat==0)] <- NaN
Matrix包提供各种稀疏矩阵类。 创建稀疏矩阵对象后,您将按照上面描述的方式加载值:
library(Matrix)
?Matrix
......会让你开始。 顺便说一下,以你所说明的方式加载密集矩阵的代码是:
M <- matrix(NA, nrow=max(c(IND1,IND2)), ncol=max(c(IND1,IND2)) ) # could use higher numbers
M[ cbind(IND1, IND2) ] <- VAL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.