使用 $p$ 逗号的子数组
Sub-array using $p$ commas
假设我有一个大小为 (n x m_1 x m_2 x m_3) 的数组 Y。如果我想要第一个大小为 (m_1 x m_2 x m_3) 的子数组,我可以使用逗号选择它作为
Y(1,,,)
类似地,如果 Y 的大小为 (n x m_1 x m_2 x m_3 x m_4) 并且我想要第一个子数组的大小为 (m_1 x m_2 x m_3 x m_4), 我可以用逗号选择它作为
Y(1,,,,)
一般来说,如果 Y 是一个大小为 (n x m_1 x m_2 x ... x m_p) 的数组并且我想要第一个大小为 ( m_1 x m_2 x ... x m_p), 我可以选为
Y(1,,...,)
其中 ,..., 表示 p 个不同的逗号。如果 p 已知,我该如何写 p 逗号?
一个简单的解决方案是
array(array(Y,c(dim(Y)[1],prod(dim(Y)[-1])))[1,])
但是,这是低效的代码(Y 可能很大,我不希望先将其转换为矩阵,然后再将其转换回数组)
您始终可以将表达式构建为文本,然后再对其求值。在您的情况下,您可以使用 strrep(",", p)
重复 "," p 次,然后使用 str2expression()
将其转换为可以计算的表达式。如果你把它放在一个函数中:
slice_first_dimension <- function(arr){
p <- length(dim(Y))
eval(str2expression(paste0("arr[1",strrep(",", p-1),"]")))
}
Y <- array(1:8, dim=c(2,2,2))
slice_first_dimension(Y)
#> [,1] [,2]
#> [1,] 1 5
#> [2,] 3 7
假设我有一个大小为 (n x m_1 x m_2 x m_3) 的数组 Y。如果我想要第一个大小为 (m_1 x m_2 x m_3) 的子数组,我可以使用逗号选择它作为
Y(1,,,)
类似地,如果 Y 的大小为 (n x m_1 x m_2 x m_3 x m_4) 并且我想要第一个子数组的大小为 (m_1 x m_2 x m_3 x m_4), 我可以用逗号选择它作为
Y(1,,,,)
一般来说,如果 Y 是一个大小为 (n x m_1 x m_2 x ... x m_p) 的数组并且我想要第一个大小为 ( m_1 x m_2 x ... x m_p), 我可以选为
Y(1,,...,)
其中 ,..., 表示 p 个不同的逗号。如果 p 已知,我该如何写 p 逗号?
一个简单的解决方案是
array(array(Y,c(dim(Y)[1],prod(dim(Y)[-1])))[1,])
但是,这是低效的代码(Y 可能很大,我不希望先将其转换为矩阵,然后再将其转换回数组)
您始终可以将表达式构建为文本,然后再对其求值。在您的情况下,您可以使用 strrep(",", p)
重复 "," p 次,然后使用 str2expression()
将其转换为可以计算的表达式。如果你把它放在一个函数中:
slice_first_dimension <- function(arr){
p <- length(dim(Y))
eval(str2expression(paste0("arr[1",strrep(",", p-1),"]")))
}
Y <- array(1:8, dim=c(2,2,2))
slice_first_dimension(Y)
#> [,1] [,2]
#> [1,] 1 5
#> [2,] 3 7