從1維矩陣:如何從MATLAB列表中獲取最頻繁的值(但多個值)?
list_A = [1,2,4,6,7,7,7,9,10,11,11,11,13,13,13]
我怎樣才能獲得具有最高出現次數的列表(在這種情況下發生= 3)
,我想應該是這樣的答案(如果我們使用list_A):
Ans = [7,11,13]
從1維矩陣:如何從MATLAB列表中獲取最頻繁的值(但多個值)?
list_A = [1,2,4,6,7,7,7,9,10,11,11,11,13,13,13]
我怎樣才能獲得具有最高出現次數的列表(在這種情況下發生= 3)
,我想應該是這樣的答案(如果我們使用list_A):
Ans = [7,11,13]
使用hist
:
我假定你的載體A
排序。
A = [1,2,4,6,7,7,7,9,10,11,11,11,13,13,13];
occ = 3;
out = A(hist(A,A) == occ)
給出了:如果有也是負數
A = [7,7,7,1,2,4,6,9,10,11,11,11,13,13,13]
occ = 3;
out = find(histc(A,1:max(A)) == occ)
:
out =
7 11 13
如果A
沒有排序,你可以對它進行排序,當然,或:
A = [7,7,7,-4,6,-9,10,-11,-11,-11,13,13,13,-20]
occ = 3;
out = find(histc(A,min(A):max(A)) == occ) + min(A)-1
或簡單的版本是工作壓力太大:
A = sort(A);
out = A(hist(A,A) == occ)
>> out = -11 7 13
另一種方便的方法是使用統計工具箱,這將甚至十進制值工作的tabulate
功能!
A = [7.5,7.5,7.5,-4,6,-9,10,-11,-11,-11,13,13,13,-20]
occ = 3;
T = tabulate(A);
out = T(T(:,2) == occ ,1)
>> out =
-11.0000
7.5000
13.0000
+1已經,但現在好奇的未排序的情況與負數。 – Divakar
@Divakar:見last編輯:) – thewaywewalk
'sort'的明確用法對我有意義:) – Divakar
您可以mode
最容易做到這一點。要獲得所有值,你應該使用第三輸出,這將是一個單元陣列:
[~, ~, result] = mode(list_A);
result = result{1}.';
編輯
如果您的載體已經排序,你想利用這一點(這mode
顯然不會做),你可以手動diff
,find
和max
做到這一點:
ii = find(diff([list_A inf]));
dii = diff(ii);
result = list_A(ii(find(dii==max(dii))+1));
'mode'在這裏很有意義! – Divakar
哇!它甚至是一個標準功能!你只限於最常用的值,但這就是標題所說的。 – thewaywewalk
有看看我的編輯,還有其他一些可能性。 – thewaywewalk