2017-07-04 21 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有两个单元阵列,而不是简单的矩阵 –

相关问题