Если задана матрица, скажем m, существует ли какой-либо прямой метод для нахождения верхних k значений m, а затем найдите именно тот столбец/строку, к которому они принадлежат. Я не мог найти что-либо на SO и, следовательно, поставил этот вопрос. Моя попытка на вышесказанном было это:Как быстро найти индекс столбца для верхних n значений матрицы?
set.seed(1729)
k=5 #top 5
m = matrix(round(runif(30),digits = 2),nr=10)
idx <- which(matrix(m %in% head(sort(m), k), nr = nrow(m)), arr.ind = TRUE)
print(m)
[,1] [,2] [,3]
[1,] 0.59 0.54 0.57
[2,] 0.44 0.43 0.32
[3,] 0.57 0.08 0.29
[4,] 0.35 0.58 0.24
[5,] 0.86 0.52 0.53
[6,] 0.41 0.78 0.17
[7,] 0.51 0.47 0.26
[8,] 0.15 0.81 0.49
[9,] 0.85 0.64 0.64
[10,] 1.00 0.78 0.95
print(idx)
row col
[1,] 8 1
[2,] 3 2
[3,] 4 3
[4,] 6 3
[5,] 7 3
Я не уверен, если это является эффективным из-за той причине, что я сортировочного целые значения матрицы, а не подбирая те к значений. Я хотел бы предположить, k < < длина (м). Существуют ли эффективные способы для большой матрицы м, а также есть ли методы, которые могли бы помочь мне с дублирует в сценариях, как, когда один хочет, чтобы получить Top K имена столбцов
Например: с matrix mm, мне нужно определить верхние 2 столбца, имеющие наименьшие значения. Здесь, в следующем случае я ожидаю колонки 1 и 2
mm = matrix(c(6,6,7,8,7,9,8,8,9), 3)
print(mm)
[,1] [,2] [,3]
[1,] 6 8 8
[2,] 6 7 8
[3,] 7 9 9
idx <- which(matrix(mm %in% head(sort(mm), 2), nr = nrow(mm)), arr.ind = TRUE)
print(idx)
row col
[1,] 1 1
[2,] 2 1
Но, здесь я получаю только один столбец, то есть .; 1, В этом случае вывод должен быть двумя разными столбцами, имеющими наименьшие значения, а именно. 1 и 2
Для первой части см. [Этот пост] (http://stackoverflow.com/questions/3692563/how-to-return-5-topmost-values-from-vector-in-r). В основном, вы используете 'sort.int' и' partial = TRUE' для ускорения вашего сортировки. – Barker
Мои извинения, я имел в виду 'partial = 1: k'. – Barker
Спасибо за ссылку! Это полезно в некотором роде. – rahulkmishra