получить уникальные элементы в матрице и ее индексы, которые рассчитывают больше, чем заданное значение в Matlab - PullRequest
0 голосов
/ 13 мая 2018

У меня есть вектор, и я хочу получить количество уникальных элементов в этом векторе и найти индексы элементов, число которых больше заданного значения

Например, пусть

A = [1,2,2,1,1,1,5,5,5,1,1,5]
[c,ia,ic] = unique(A)
c_counts = accumarray(ic,1);

Теперь я хочу найти индексы значений в A, где c == t заданное значение (например, t = 4).

Мой ожидаемый результат при t = 4 будет 7,8,9,12 (индексы 5, а 5 появляется ровно в 4 раза), а при t = 6 выходной результат будет 1,4,5,6,10,11 (индексы 1, как это точно выглядит 6).

======================== UPDATE ====================== знак равно Я хочу перебирать только верхние 5 значений (5 самых высоких значений). Я получаю количество уникальных элементов в cb_counts, а затем перебираю 5 самых больших значений, чтобы получить результат.

Как я могу сделать это в Matlab?

1 Ответ

0 голосов
/ 13 мая 2018

Используйте accumarray, чтобы получить счетчик каждого unique элемента и объединить c с ним. Теперь сортируйте строки , чтобы получить счет в порядке с их уникальными элементами. Итерируйте и используйте find, чтобы получить соответствующие индексы A для его уникальных элементов счетчиков top- t.

t = 2;   %Number of top counts
tmp = sortrows([c.' accumarray(ic,1)], -2);  
out =  arrayfun(@(x) find(A==tmp(x,1)), 1:t, 'un', 0);

%or with a conventional loop instead of arrayfun:
%out = cell(1,t)
%for k=1:t
%   out{k} = find(A==tmp(k,1));
%end

>> out{:}

ans =

     1     4     5     6    10    11


ans =

     7     8     9    12

Если вам нужен один вектор, содержащий все индексы, то [out{:}] даст вам это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...