У меня есть матрица 3x3x3 (МП) нормализованных вероятностей (сумма до 1). Когда я запускаю образец (27,1, MP, replace = T), он возвращает целое число от 1 до 27, предположительно, последовательный индекс матрицы. Я хотел бы знать, какой матричный элемент в терминах индексов элементов (например, номер строки, номер столбца, номер z). При построении массива из N измерений (в данном случае N = 3), как определить порядок элементов? Другими словами, если я взял N-мерный массив и поместил все элементы в список, как я могу сопоставить список с N-мерными элементами?в R выборке список вероятностей возвращает одну позицию. Как преобразовать эту позицию в индекс элемента?
ответ
Используйте 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
Технически это только матрица, если она двумерная. У вас есть трехмерный массив. Если вы просто попробовать:
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
. Он имеет более высокую производительность.
Отлично. Благодарю. Очень полезно. –
Отлично. Только то, что я искал. Этот ответ в сочетании со вторым ответом, который я получил, предоставит мне необходимое мне решение. Спасибо! –