繁体   English   中英

如何通过n-1维数组和没有循环从n维数组中提取n-1维数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM