我有一个归一化概率的 3x3x3 矩阵 (MP)(总和为 1)。当我运行 sample(27,1, MP, replace = T) 时,它返回一个 1 到 27 之间的整数,大概是矩阵的顺序索引。我想知道元素索引方面的哪个矩阵元素(例如行号、列号、z 号)。在构建 N 维数组时(在这种情况下 N=3),如何确定元素的顺序?换句话说,如果我取一个 N 维数组并将所有元素放在一个列表中,我如何将列表映射到 N 维元素?
问问题
208 次
2 回答
3
使用which
with 参数arr.ind=TRUE
返回数组索引。
m <- array((1:27)*10, dim=c(3,3,3))
x <- sample(27, 1)
x
# [1] 20
which(m == m[x], arr.ind=TRUE)
# dim1 dim2 dim3
# [1,] 2 1 3
于 2013-07-16T03:34:42.447 回答
0
从技术上讲,如果它是二维的,它只是一个矩阵。你所拥有的是一个三维数组。如果你只是尝试:
array( 1:27, dim = c(3, 3, 3) )
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
, , 3
[,1] [,2] [,3]
[1,] 19 22 25
[2,] 20 23 26
[3,] 21 24 27
所以你可以从打印出来的索引中看到对应于哪个顺序值。例如,序列 1:27 中的项目 20 位于 [2, 1, 3]。该序列首先通过列计数,然后是行,然后是矩阵。知道了这一点,您不必担心保留索引。您始终可以重新创建阵列。此外,如果您只想对您的商品进行实际采样,您可以执行以下操作:
y <- array( 1:27, dim = c(3, 3, 3) ) / sum(1:27) # an array like yours
sample(y, 1)
或者,如果您只想打乱整个阵列,您可以尝试sample(y)
.
顺便说一句,如果你真的想做你似乎表明的事情,在运行 sample use 时sample.int
。它具有更高的性能。
于 2013-07-16T03:54:55.293 回答