Если у меня есть этот вектор:
x = [1 1 1 1 1 2 2 2 3 4 4 6 6 6 6]
Я хотел бы получить позицию каждого уникального номера в соответствии с самим собой.
y = [1 2 3 4 5 1 2 3 1 1 2 1 2 3 4]
В данный момент я использую:
y = sum(triu(x==x.')) % MATLAB 2016b and above
Это компактно, но, очевидно, не эффективно с памятью.
Для чистой красоты программирования на MATLAB я бы не использовал цикл. У вас есть лучшая простая реализация?
Контекст:
Моя последняя цель - отсортировать вектор x
, но с ограничением, что число, которое появляется N
раз, имеет приоритет над другим числом, которое появилось более чем N
раз:
[~,ind] = sort(y);
x_relative_sort = x(ind);
% x_relative_sort = 1 2 3 4 6 1 2 4 6 1 2 6 1 6 1