2013-07-16 3 views
1

У меня есть матрица 3x3x3 (МП) нормализованных вероятностей (сумма до 1). Когда я запускаю образец (27,1, MP, replace = T), он возвращает целое число от 1 до 27, предположительно, последовательный индекс матрицы. Я хотел бы знать, какой матричный элемент в терминах индексов элементов (например, номер строки, номер столбца, номер z). При построении массива из N измерений (в данном случае N = 3), как определить порядок элементов? Другими словами, если я взял N-мерный массив и поместил все элементы в список, как я могу сопоставить список с N-мерными элементами?в R выборке список вероятностей возвращает одну позицию. Как преобразовать эту позицию в индекс элемента?

ответ

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 

Таким образом, вы можете видеть из печати, что индекс соответствует какому последовательное значение. Например, пункт 20 в последовательности 1:27 находится в [2, 1, 3]. Последовательность сначала подсчитывается по столбцам, а затем строкам, затем матрицам. Зная это, вам не нужно так беспокоиться о сохранении индексов. Вы всегда можете воссоздать свой массив. Кроме того, если вы просто хотел на самом деле попробовать ваш товар вы можете сделать следующее:

y <- array(1:27, dim = c(3, 3, 3))/sum(1:27) # an array like yours 
sample(y, 1) 

Или, если вы хотите просто зашифровать весь свой массив, который вы могли бы попробовать sample(y).

BTW, если вы действительно хотите делать то, что, по-видимому, указывать, при использовании пробега sample.int. Он имеет более высокую производительность.

+0

Отлично. Благодарю. Очень полезно. –

 Смежные вопросы

  • Нет связанных вопросов^_^