Вытащить определенные точки из массива 4d, используя векторы - PullRequest
1 голос
/ 06 июня 2019

У меня есть 4-мерный массив, из которого мне нужно получить определенные значения.Конкретные значения из двух стабильных измерений и двух, которые меняются.См. Пример для лучшего описания.

 set.seed(5)
 array <- array(dim=c(20,3,10,5))
 array[,,,] <- runif(3000,0,50)

Так что мне нужно извлечь определенные значения из этого массива.Значение измерения 2 всегда будет равно 3, а измерение 4 всегда будет равно 1, но другие значения изменятся.У меня есть векторы того, что мне нужно от каждого, но я не знаю, как их объединить.

 v1 <- c(1, 7, 10, 11, 3, 6, 20, 5, 5, 4)
 v2 <- c(1, 1, 4, 6, 2, 3, 9, 8, 7, 8)

, поэтому в основном мне нужен массив [1,3,1,1], массив [7,3,1,1], массив [10,3,4,1], массив [11,3,6,1] и т. Д.

 > array[1,3,1,1]
 [1] 40.8038
 > array[7,1,1,1]
 [1] 26.398
 > array[10,3,4,1]
 [1] 7.784153
 > array[11,3,6,1]
 [1] 31.50343

Есть ли способ использовать v1 и v2 для определения этих точек?Если я сделаю массив [v1,3, v2,1], он даст мне блок 10x10, но я хочу только 10 отдельных значений.

Заранее спасибо!

1 Ответ

1 голос
/ 06 июня 2019

Решение состоит в том, чтобы использовать матрицу индексов, по одной строке на набор индексов:

array[cbind(v1,3,v2,1)]

# [1] 40.803803 38.007126  7.784153 31.503427 28.722716 32.444720 16.527393 14.420411
# [9] 41.935482 36.993050
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...