2013-07-16 22 views
1

我有一個歸一化概率的3x3x3矩陣(MP)(總和爲1)。當我運行樣本(27,1,MP,替換= T)時,它返回1到27之間的一個整數,可能是矩陣的順序索引。我想知道哪個矩陣元素根據元素索引(例如行號,列號,z號)。當構建一個N維數組(在這種情況下N = 3)時,如何確定元素的順序?換句話說,如果我使用N維數組並將所有元素放入列表中,如何將列表映射到N維元素?抽樣概率列表返回一個位置。如何將該位置轉換爲元素索引?

回答

3

使用which,參數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 
+0

非常好。正是我在找的東西。這個答案,加上我收到的第二個答案,將爲我提供我需要的解決方案。謝謝! –

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.int。它具有更高的性能。

+0

太棒了。謝謝。很有幫助。 –

相關問題