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])
假设我有 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 orderarray(arr[sum(c(1,cumprod(dim(arr)))[3:length(dim(arr))]*(idx-1))+
seq_len(prod(dim(arr)[1:2]))],dim(arr)[1:2])