我想做一些矩阵运算,最好使用3(或更高)维数组。如果我想按行填充矩阵,则会有一个参数(byrow = TRUE )但是没有这样的选项来创建/填充多维数组。我能够实现它的唯一方法是使用 aperm 来转置由列填充的数组。例如:
arr.1 <- array(1:12, c(3,2,2))
arr.1
arr.2 <- aperm(arr.1, c(2,1,3))
arr.2
生成正确的结果,一个由行填充的维2,3,2数组。从Column x Row x Range数组向后工作以获得Row x Column x Range数组似乎有点反直觉。这可能是以前f77编码的坏习惯,还是我忽略了一些简单的东西?
答案 0 :(得分:0)
我的建议是&#34;教授&#34;通过运行
自己作为默认顺序 foo<- array(1:60,3,4,5)
然后,您可以通过重新排列源向量或创建矩阵并按所需顺序将它们加载到数组的z层中来填充任意数组。
答案 1 :(得分:0)
R中的数组由首先遍历第一个维度填充。因此,首先遍历第一个维度,然后是第二个维度,然后是第三个维度(如果可用)。
如果是矩阵:
array(c(1,2,3), dim = c(3,3))
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
或者是作业:
M <- array(dim = c(3,3))
M[,] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
分配到第二个维度很简单:
M <- array(dim = c(3,3))
M[,2:3] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] NA 1 1
[2,] NA 2 2
[3,] NA 3 3
但是分配给第一维更加棘手。以下内容未给出预期结果:
M <- array(dim = c(3,3))
M[2:3,] <- c(1,2,3)
M
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 1 3 2
[3,] 2 1 3
首先遍历第一维,然后第二维填充数据。我们想要的是首先遍历第二维,然后是第一维。所以我们必须aperm
数组(或在矩阵的情况下转置)。
M <- array(dim = c(3,3))
Mt <- aperm(M)
Mt[,2:3] <- c(1,2,3)
M <- aperm(Mt)
M
[,1] [,2] [,3]
[1,] NA NA NA
[2,] 1 2 3
[3,] 1 2 3
我可能还有更多优雅的方法可以做到最后一点,我不知道。