![](/img/trans.png)
[英]How to join an n-dimension array with different separators for each level?
[英]How to extract n-1 dimension array from a n-dimension array thanks to a n-1 dimension array and without a loop?
我的问题很简单,但我似乎无法找到解决方案。 我有一个n维数组A,我想提取n-1维数组B,这要归功于索引C的n-1维数组。我怎么能这样做,没有循环?
例如 :
A=array(1:12, dim=c(2,3,2))
A
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
C=array(c(1,2,2,1,1,2),dim=c(2,3))
C
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 2 1 2
最后我想找到B(像“A [,, C]”这样的东西)
B
[,1] [,2] [,3]
[1,] 1 9 5
[2,] 8 4 12
好像我做了
B
[,1] [,2] [,3]
[1,] A[1,1,C[1,1]] A[1,2,C[1,2] A[1,3,C[1,3]]
[2,] A[2,1,C[2,1]] ...
我必须在5个维度做这个,所以如果我可以避免做循环...
谢谢。
我会通过索引计算来解决这个问题:通过向0:(length(C)-1)
中的每个[。,。,i] -slice(在你的情况下为i = 1,2)中添加0:(length(C)-1)
你得到第A
的索引切片。 如果一个乘C-1
与长度C
之前完成,然后1
加,你也将获得所有其他片段的正确指标。 -1
和+1
操作相互补偿,因此我们可以很快表达出来:
ind <- as.vector((C-1) * length(C) + 1:length(C))
array(A[ind], dim = dim(C))
另一种方案:
B<-A[cbind(c(row(C)),c(col(C)),c(C))]
dim(B)<-dim(C)
你也可以试试
library(reshape2)
matrix(A[as.matrix(melt(C))], ncol=ncol(C))
# [,1] [,2] [,3]
#[1,] 1 9 5
#[2,] 8 4 12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.