如何找到包含randperm元素的2个单元格数组的常见元素?

时间:2017-07-04 21:01:29

标签: matlab cell cell-array

我有两个可能不一样大小的单元格数组。单元格数组的元素是整数的randpermrandperm数据类型是双数组。如何找到两个单元阵列的公共元素?

例如:

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。我希望上面示例的输出为&{34} Q1的元素-1,即[1 2 3 4],因为它也存在于Q2中。 注意:单元格数组可能有不同数量的列...

2 个答案:

答案 0 :(得分:2)

Vertically concatenate单元格数组中的矩阵,并使用带有'rows'标记的intersect。即。

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

答案 1 :(得分: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