私が配列を持っているとしましょう
TestArray=array(1:(3*3*4),c(3,3,4))
以下ではTestArray[i,,]
、 、 TestArray[,j,]
、をそれぞれTestArray[,,k]
、x=i
、y=j
およびz=k
サブセットと呼びます。この特定の例では、インデックスi
とj
は 1 から 3 およびk
1 から 4 に移動できます。
ここで、この 3 次元配列をサブセット化して、サブセットを取得したいと考えていx=y
ます。出力は
do.call("cbind",
list(TestArray[1,1,,drop=FALSE],
TestArray[2,2,,drop=FALSE],
TestArray[3,3,,drop=FALSE]
)
)
私は(素朴に)そのような操作が可能であるべきだと考えました
library(Matrix)
TestArray[as.array(Diagonal(3,TRUE)),]
これは2次元で機能します
matrix(1:9,3,3)[as.matrix(Diagonal(3,TRUE))]
ただし、3 次元では誤差が生じます。
インデックス配列を生成できることを知っています
IndexArray=outer(diag(1,3,3),c(1,1,1,1),"*")
mode(IndexArray)="logical"
要素にアクセスする
matrix(TestArray[IndexArray],nrow=4,ncol=3,byrow=TRUE)
しかし、最初の方法ははるかに優れており、必要なメモリも少なくなります。希望どおりに動作するように修正する方法を知ってTestArray[as.array(Diagonal(3,TRUE)),]
いますか? 多分私はいくつかの構文糖衣を欠いている...