R - 如何从多维数组中获取矩阵

R - How to get matrix from multidimensional array

假设我有 5 维数组 arr。 要获得具有固定的第 3、4 和 5 个索引的 2d 矩阵,我会执行以下操作: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 执行此操作。

我有这个,但我也确定应该有更合适的东西...

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

基本上将索引准备为字符串。在那里创建功能的机会。

你可以试试:

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:

使用的 column-major order
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])