我假設A
是一個單元陣列 -
A = { 'AA AB AC CD'; 'BA AC CF GD'; 'AA AB AC CD'; 'CF GD TH EF'; 'AA AB AC CD'}
爲了解決了上述問題,幾種方法都可以在這裏建議。
方法#1
這是一種直接的,沒有搞亂,各地的做法 -
[unique_strings,~,labels] = unique(A,'stable');
counts = histc(labels,1:max(labels))
方法2
這是一個性能爲導向的解決方案,將單元陣列轉換爲2D
陣列 -
[~,idx,labels] = unique(double(char(A)),'rows','stable')
counts = histc(labels,1:max(labels))
unique_strings = A(idx)
方法3
這是另一種表現取向溶液,與合併的所有字符中的細胞成一個單一的數後的單元陣列轉換爲1D
陣列工程 -
num_array = char(A)-0
pow10_vals = 10.^(size(num_array,2)-1:-1:0)
[~,idx,labels] = unique(num_array*pow10_vals','stable') %//'
counts = histc(labels,1:max(labels))
unique_strings = A(idx)
你會得到的輸出 -
>> unique_strings
unique_strings =
'AA AB AC CD'
'BA AC CF GD'
'CF GD TH EF'
>> counts
counts =
3
1
1
輸出可以在一個奇特的方式顯示以及與table
-
>> table(unique_strings,counts)
ans =
unique_strings counts
______________ ______
'AA AB AC CD' 3
'BA AC CF GD' 1
'CF GD TH EF' 1
請注意,如果你不關心字符串的順序,你可以跳過'stable'
選項與上面提到的方法和可能會更有效一點。
如果你不關心字符串的順序,你可以跳過''stable''選項,這可能會更有效一點。 – Divakar 2014-11-06 17:35:01
這絕對有用,Thx!然而,有關這個功能的複雜性的任何想法?任何想法我怎麼能看看它的代碼? – 2014-11-06 17:42:30
@husseinhammoud通過'看代碼',你的意思是我猜測的一些解釋。所以,這非常簡單 - 「唯一」的第一步是爲我們提供獨特的字符串,並根據每個單元格與其他單元格的共同性爲每個單元格分配一個標籤。在下一步中,我們使用這些標籤併爲每個標籤計數,該標籤對應於上一步中找到的每個唯一字符串/單元格。這是否有點解釋? – Divakar 2014-11-06 17:45:21