2017-03-22 61 views
0

我有一個包含多個行和有限(但大於1)個數的列的大矩陣,其中包含0到9之間的值,並希望找到一種有效的方法識別獨特的行方向組合及其索引,然後構建總和(somehwat像樞軸邏輯)。這裏是什麼,我想實現一個例子:Matlab在矩陣和各自的索引中找到唯一的列組合

a = 

1  2  3 
2  2  3 
3  2  1 
1  2  3 
3  2  1 

uniqueCombs = 

1  2  3 
2  2  3 
3  2  1 

numOccurrences = 

2 
1 
2 

indizies: 

[1;4] 
[2] 
[3;5] 

從矩陣a,我想先找出獨特組合(按行),再算上出現次數/確定的行索引各自的組合。

我已經通過生成字符串num2strstrcat來實現這一點,但是這種方法似乎很慢。沿着這些想法,我試圖找到一種通過水平連接值來形成新的唯一編號的方法,但Matlab似乎不支持這種方式(例如,從[1;2;3]編譯123)。總和將不起作用,因爲它們將消除識別獨特組合的可能性。有關如何最好地實現這一點的任何建議?謝謝!

回答

0

爲了讓你可以使用unique啓用了'rows'選項中的唯一行:

[C, ix, ic] = unique(a, 'rows', 'stable'); 

C包含了獨特的行; ixC第一次出現這些行的索引; ic基本上包含你想要的信息。要訪問它,你可以遍歷的ix索引,並將其保存在一個單元陣列:

indexes = cell(1, length(ix)); 
for k = 1:length(ix) 
    indexes{k} = find(ic == ix(k)); 
end 

indexes將包含您所查找的索引中的單元陣列。例如:

indexes{1} 

% ans = 
% 
% 1 
% 4 

並計算你可以使用numel的特定組合的出現。例如:

numel(indexes{1}) 

% ans = 
% 
% 2 
+0

工程就像一個魅力,非常感謝! – Benvaulter