2015-06-01 219 views
0

有人可以幫助我在Matlab中創建函數嗎?我有一個包含40個元素的數組,其中一些元素是重複的。計算數組中的重複值

我需要創建一個計算數組中的重複值的函數,並打印這樣即:

Number 21 repeats 4 time(s) 
Number 25 repeats 1 time(s) 
Number 40 repeats 3 time(s) etc. 

預先感謝您。我一直在努力幾個小時。

+2

如果你從以前的嘗試之一添加代碼,我們可以使用它作爲基地,以幫助您識別出了什麼問題以及如何解決它。 –

+0

嗨,我無法弄清楚如何做到這一點,你可以提供一個示例數組,將解決問題 – user3070259

+0

簽出[這個](http://www.mathworks.com/matlabcentral/answers/19042-finding-duplicate-每列值) – dlavila

回答

-1

你可以試試這個:

array = randi(40,1,40) 
array_labels = unique(array) 
% counter(length(array_labels))=0 
counter = zeros(1,length(array_labels)) 
for j=1:length(array_labels) 
    for i=1:40 
     if array(i)==array_labels(j) 
      counter(j) = counter(j) + 1; 
     end 
    end 
end 
counter 
final = horzcat(array_labels',counter') 
sum(counter) 
+1

另外,其他答案是更好的方法。如果沒有必要,你應該儘量不要使用循環。另一個答案提供了一個更簡潔和有效的解決方案 – Matt

3

您可以使用uniquehistc

x = [1 3.5 4 3.5 4 9 7 9 4 2]; %// example data 
unique_values = unique(x(:)); 
counts = histc(x(:), unique_values); 

的這個例子的結果是:

unique_values.' = 
    1.0000 2.0000 3.5000 4.0000 7.0000 9.0000 
counts.' = 
    1  1  2  3  1  2 

或者使用uniqueaccumarray

x = [1 3.5 4 3.5 4 9 7 9 4 2]; %// example data 
[unique_values, ~, labels] = unique(x(:)); 
counts = accumarray(labels, 1);