Я хочу сравнить огромный вектор с выбранным элементом из матрицы в R.Сравните вектор с выбранным элементом из матрицы
А является матрицей и B является вектором. Я хочу сравнить каждый элемент B с выбранным элементом из A. C и D - критерии выбора. Они представляют собой векторы одинаковой длины, такие как B. C указывает номер строки A, а D указывает номер столбца. А имеет размерность 10 * 100, и В, С, D являются все векторы длины 72000. Код с цикл:
for (j in 1:length(B)){
E[j] <- B[j] >= A[ C[j], D[j] ]
}
Это слишком медленно. I векторизовать это путем определения вектора, включающего элементы из A сначала:
A1 <- array(0, length(B))
A2 <- A[,D]
for (j in 1:length(B)){
A1[j] <- A2[ C[j], j ]
}
E <- B >= A1
Это все еще слишком медленно. Есть ли лучший способ этого?
Могу ли я спросить, нашли ли вы один из трех ответов ниже справки? – MatthewS
Я думаю, что все они полезны. В этом случае третий с cbind быстрее. Однако, если A является 3 или более высоким размерным массивом, то второй более подходит. Я могу использовать A [C, D ,,] для его индексации. Однако неправильно использовать A [cbind (C, D) ,,]. – lionup
Чтобы уточнить @lionup, если вы подмножите массив по одной матрице (например, 'A [cbind (C, D)]', вы получите вектор с одним значением для каждой строки в A. Если вы подмножество с использованием нескольких векторов (например, 'A [C, D]'), вы получите массив 'length (C)' x 'length (D)'. Оба полезны, когда это необходимо, но важно понимать, что они не совпадают! – MatthewS