1

5D array があるとしarrます。3 番目、4 番目、5 番目のインデックスが固定された 2 次元行列を取得するには、次のようにしますmatr = arr[,,3,2,3]。インデックスのリストがあるとしますidx = c(3,2,3)。を使用して同じ結果を得る方法はありますidxか? みたいなmatr = arr[,,idx]?私はそれを次のようにしようとしました

idx = c(,, 3, 2, 3);
matr = arr[idx];

しかし、それは明らかに間違っています。

一般的なケース配列のUPDは、5 次元を超える場合があります。したがって、任意のサイズの idx に対してこれを行う必要があります。

4

2 に答える 2

3

あなたが試すことができます:

do.call("[",c(list(arr,TRUE,TRUE),as.list(idx)))

いくつかのデータの例:

set.seed(123)
arraydims<-c(5, 3, 6, 3, 4)
arr<-array(runif(prod(arraydims)),arraydims)
idx<-c(2,3,2)
identical(arr[,,2,3,2],do.call("[",c(list(arr,TRUE,TRUE),as.list(idx))))
#[1] TRUE

R で使用される列優先順序を利用することもできます。

array(arr[sum(c(1,cumprod(dim(arr)))[3:length(dim(arr))]*(idx-1))+
            seq_len(prod(dim(arr)[1:2]))],dim(arr)[1:2])
于 2016-06-20T10:08:11.333 に答える
1

私はこれを持っていますが、もっと適切なものがあるべきだと確信しています...

A <- array(1:72, dim=c(2,2,3,2,2))
res <- eval(parse(text=paste0("A[,,",paste0(idx,collapse=",")),"]")))

基本的に、インデックスを文字列として準備します。そこに関数を作成する機会。

于 2016-06-20T09:56:52.723 に答える