首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中Matlab的稀疏(i,j,s,m,n)等价

R中Matlab的稀疏(i,j,s,m,n)等价
EN

Stack Overflow用户
提问于 2012-04-26 21:20:47
回答 2查看 879关注 0票数 4

我在和R一起工作。

我有一个矩阵结构,但是存储在三个列表IND1、IND2和VAL中,每个列表的长度都是相同的N;我需要将VAl中的值存储在一个矩阵垫中,这样:

代码语言:javascript
复制
for each i in 1 to N:
    MAT[IND1(i), IND2(i)] == VAL(i)

正如你可以猜到的那样,MAT的最终大小不一定是NxN,但我知道它的大小必须是多少(如果你需要知道它的大小,就叫它m,因为对我来说,它必须是一个方阵)。

Matlab有一个很好的函数来创建一个sparse矩阵来做这个,但是我需要用R语言来实现,希望没有循环,有人知道这是不是可以做到的,请告诉我是怎么做的。提前谢谢。

附言:我已经尝试过显而易见的:

代码语言:javascript
复制
MAT <- matrix(nrow=m, ncol=m)
MAT[IND1, IND2] <- VAL

但是我得到了一个奇怪的结果(所有行都有相同的重复值)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 21:57:28

DWin是对的--矩阵包是个不错的选择。但是,如果您有大量数据,我发现值替换的替换类型可能会挂起或花费很长时间。一种更好的方法可能是创建一个类sparseMatrix对象,然后在需要时转换为类矩阵。例如。

代码语言:javascript
复制
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

票数 6
EN

Stack Overflow用户

发布于 2012-04-26 21:32:02

Matrix包提供了各种稀疏矩阵类。创建稀疏矩阵对象后,您将完全按照上面描述的方式加载值:

代码语言:javascript
复制
library(Matrix)
?Matrix

..。会帮你入门。顺便说一句,以您所演示的方式加载密集矩阵的代码如下:

代码语言:javascript
复制
M <- matrix(NA, nrow=max(c(IND1,IND2)), ncol=max(c(IND1,IND2)) ) # could use higher numbers
M[ cbind(IND1, IND2) ] <- VAL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10334296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档