Matlab: сортировка массива по другому вектору - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть вектор dG=rand(m,1); и массив lambda=rand(m,8);

Я сортирую dG в порядке убывания, а затем сортирую лямбду "по строкам" на основе вновь отсортированного dG.Причина этого в том, что я хочу 5% значений из лямбда-выражения на основе вершины 5% недавно отсортированного вектора dG.

Но когда m очень велико, этот процесс оченькропотливый.Есть ли более эффективный способ?

Например:

m=1E10;

dG=rand(m,1); 
lambda=rand(m,8);

[~, Gsort]=sort(dG);
lambdaSorted=lambda(Gsort,:);

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете использовать maxk вместо сортировки для извлечения верхних 5% значений:

[~, Gsort] = maxk(dG, 0.05 * m);
lambdaSorted = lambda(Gsort, :);

Если у вас есть набор инструментов «Статистика и машинное обучение», вы можете использовать prctile для извлечения 95nd процентиля элементов. Опция 'approximate' не использует сортировку для аппроксимации процентиля и подходит для больших данных.

p = prctile(dG, 95,'Method','approximate');
lambdaSorted = lambda(dG > p, :);

Если вы хотите случайным образом перестановить массив, вы можете использовать randperm:

idx = randperm(m, 0.05 * m);
lambdaSorted = lambda(idx, :);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...