2017-07-04 49 views
1

我有兩個單元陣列,它們的大小可能不一樣。單元陣列的元素是整數的randpermrandperm數據類型是雙數組。我怎樣才能找到兩個單元陣列的共同元素?如何查找包含randperm元素的2個單元格數組的常見元素?

例如:

Q1 = {[1 2 3 4], [3 2 4 1], [4 2 1 3]} 
Q2 = {[2 4 3 1], [1 2 3 4], [1 2 4 3]} 

正如我所說的單元陣列的各元素randperm。我想上面的例子中的輸出是「元件-1的Q1[1 2 3 4],因爲它也存在於Q2 注:細胞陣列可以具有不同數量的列...

+0

我想我例如:Q1 =([1 2 3 4],[3 2 4 1],[4 2 1 3])&Q2 =([2 4 3 1],[1 2 3 4],[1 2 4 3]),正如我所說的數組單元的元素是randperm。我想上面的例子的輸出是「Q1的元素1和Q2的元素2相同」 – Bahar

回答

2

Vertically concatenate單元陣列內的矩陣和使用intersect'rows'標誌。即

Q1={[1 2 3 4], [3 2 4 1], [4 2 1 3]}; 
Q2={[2 4 3 1], [1 2 3 4], [1 2 4 3]}; 
Qout = intersect(vertcat(Q1{:}), vertcat(Q2{:}), 'rows'); 

%>> Qout 
%Qout = 
%  1  2  3  4 
+0

謝謝。這很有用。 – Bahar

+0

對不起。我有使用上述解決方案的問題。我的單元格陣列沒有相同數量的列。我得到錯誤:輸入A和B必須是'行'情況下具有相同列數的矩陣。 – Bahar

+0

@Bahar如果他們真的,如你所說,* randperm *是一個整數no。那麼單元格數組內的每個矩陣將始終具有相同的列數。提供符合條件的'Q1'和'Q2'的樣本並給出你提到的錯誤 –

0

你可以做到這一點,通過使用兩個循環,並檢查全部關閉它們。

q1=[1 2 3 4; 3 2 4 1; 4 2 1 3]; 
q2=[2 4 3 1; 1 2 3 4; 1 2 4 3]; 

%find the size of matrix 
[m1,n1] = size(q1); 
[m2] = size(q2,1); 

for (ii=1:m1) 
    for (jj=1:m2) 
     %if segments are equal, it will return 1 
     %if sum of same segment = 4 it means they are same 
     if (sum(q1(ii,:) == q2(jj,:)) == n1) 
      ii %result of q1 
      jj %result of q2 
      break; 
     end 
    end 
end 
+1

OP有兩個單元陣列,而不是簡單的矩陣 –

相關問題