Найти числа, которые НЕ являются наиболее часто встречающимися из матрицы в Matlab
Я хотел бы найти числа, которые не являются наиболее частыми из матрицы для каждого столбца в Matlab
например,
a = [3 3 1 4; 0 0 1 1; 0 1 2 4]
Я ожидаю ответ
[3 3 2 1]
Любая помощь будет принята с благодарностью.
Заранее спасибо.
С Уважением,
Раджа
2 ответа
Решение
Предполагая, что в случае tie
для минимального количества в столбце, вы должны согласиться на минимальный элемент, это bsxfun
на основе кода решения для его решения -
%%// Unique values across the entire matrix
unqval = unique(a(:))
%// Counts of those unique values for each column
counts = sum(bsxfun(@eq,a,permute(unqval,[3 2 1])),1)
%// Make the zero counts as NaNs as they don't exist at all for a column
counts(counts==0)=NaN
%// Indices for the minimum counts with the minimum valued element in a tie-case
[~,v2] = nanmin(permute(counts,[3 2 1]))
%// Minimum count elements of input for each coloumn, to form the desired output
out = unqval(v2).'
Альтернативный подход с использованием for-loop
-
alf(1,size(a,2))=0; %// alf would be the desired output
for k = 1:size(a,2)
unqval = unique(a(:,k));
[~,ind] = min(histc(a(:,k),unqval));
alf(k) = unqval(ind);
end
Это дает самое низкое значение в случае ничьей:
u = unique(a(:)).'; %'// find unique values of a
h = histc(a, u); %// count for each value, in each column
h(h==0) = inf; %// mark non-present values
[~, r] = min(h); %// find first (i.e. lowest) value with minimum count
result = u(r); %// build result