【发布时间】:2015-10-23 16:01:36
【问题描述】:
在提出问题之前,我要指出,here 有人问过类似的问题,但这个帖子并没有真正回答我的问题。
考虑以下维度数组:
1D: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
2D: [[1,2,3,4,5,6,7,8], [9,10,11,12,13,14,15,16]]
3D: [[[1,2,3,4],[5,6,7,8]], [[9,10,11,12],[13,14,15,16]]]
4D: [[[[1,2],[3,4]], [[5,6],[7,8]], [[[9,10],[11,12]], [[13,14],[15,16]]]]
...
- 一维数组的长度为 16
- 二维数组是 2x8
- 3D 阵列为 2x2x4
- 4D 数组是 2x2x2x2
假设我想创建数组。对于前两个,我可以在 R 中做这样的事情
oneD <- array(1:16, dim=16) # class(oneD) = array
twoD <- array(1:16, dim=8) # class(twoD) = matrix
但是,二维数组现在表示为
[[1,3,5,7,9,11,13,15], [2,4,6,8,10,12,14,16]]
我知道解决这个问题的两种方法。
twoD <- aperm(array(1:16, dim=8))
twoD <- matrix(1:16, nrow=2, byrow=TRUE)
但是,这些方法不适用于填充 3D 和 4D 数组。我在下面填写它们,但我希望它们与我上面的定义相匹配。
threeD <- array(1:16, dim=c(2,2,4)) # class(threeD) = array
fourD <- array(1:16, dim=c(2,2,2,2)) # class(fourD) = array
编辑
bgoldst 的回答让我意识到事实上 aperm 确实可以满足我的需求。
threeD <- aperm(array(1:16, dim=c(2,2,4))
# threeD[1,1,1] = 1
# threeD[1,1,2] = 2
# threeD[1,2,1] = 3
# threeD[1,2,2] = 4
# threeD[2,1,1] = 5
# ....
【问题讨论】:
-
这些叫数组吗?从结构上看,它们更像树。
-
另外,也许
length()可以帮助你? -
您的思维方式似乎是行主导的。如果使用 R,您应该将矩阵和数组构造视为面向列的,
-
你用 R 构建的结构没有提供你认为的那样。你应该把它们打印出来。
标签: arrays r matrix multidimensional-array vector