首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:从数组中提取矩阵,使用索引矩阵

R:从数组中提取矩阵,使用索引矩阵
EN

Stack Overflow用户
提问于 2016-09-06 16:43:54
回答 2查看 2.8K关注 0票数 4

我用R编码,我有一个包含数据的三维数组(在这个例子中是ab)。然后我有一个矩阵,它包含第三个数组维数(idx)的索引。该矩阵具有相同数量的数组的行数和列数。我想使用idx中包含的索引从数组中提取数据,以获得与idx维度相同的矩阵。请参考下面的示例:

代码语言:javascript
运行
复制
a <- c(1:9)
b <- rev(a)

#array of data
ab <- array(c(a,b), dim = c(3,3,2))
ab
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]    9    6    3
[2,]    8    5    2
[3,]    7    4    1

#matrix of indices
idx <- matrix(sample(1:2,9,replace=TRUE), nrow = 3)
idx
     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    2    1    1
[3,]    1    1    1

#now I want to get the following matrix:
     [,1] [,2] [,3]
[1,]    9    6    3
[2,]    8    5    8
[3,]    3    6    9

#these two don´t do the job
ab[idx]
ab[ , ,idx]

有谁知道我怎么才能做到这一点?

非常感谢!

萨拉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-06 16:57:33

我们需要一个行/列的索引和第三个维度(来自'idx')来提取元素。我们通过使用'idx‘对行索引和列索引进行cbind来实现这一点。

代码语言:javascript
运行
复制
i1 <- dim(ab)[1]
j1 <- dim(ab)[2]
matrix(ab[cbind(rep(seq_len(i1),  j1),rep(seq_len(j1), each = i1), c(idx))], ncol=3)
#     [,1] [,2] [,3]
#[1,]    9    6    3
#[2,]    8    5    8
#[3,]    3    6    9
票数 4
EN

Stack Overflow用户

发布于 2016-09-06 17:10:27

可能有点复杂,但至少可以工作:首先是我的idx:

代码语言:javascript
运行
复制
        [,1] [,2] [,3]
[1,]    2    2    1
[2,]    1    2    1
[3,]    2    2    2

首先,我将两者都转换为一个向量:

代码语言:javascript
运行
复制
idVec <- as.vector(idx)
d3mat <- apply(ab,3,as.vector)

然后我构造了一个向量,用来遍历每个元素:

代码语言:javascript
运行
复制
len <- length(idVec)
len <- 1:len

然后,我将一个函数应用于向量len的每个元素:

代码语言:javascript
运行
复制
resultvec <- sapply(len, function(x, vec, mat){return(mat[x,vec[x]])}, mat=d3mat, vec=idVec)

然后将结果转换回矩阵:

代码语言:javascript
运行
复制
    matrix(resultVec,3,3)
     [,1] [,2] [,3]
[1,]    9    6    7
[2,]    2    5    8
[3,]    7    4    1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39344473

复制
相关文章

相似问题

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