【问题标题】:How to find the common elements of 2 cell arrays that contain randperm elements?如何找到包含 randperm 元素的 2 个单元格数组的公共元素?
【发布时间】:2017-12-08 09:33:09
【问题描述】:

我有两个大小可能不同的单元阵列。元胞数组的元素是整数的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。我希望上面示例的输出是“Q1 的元素 1,即[1 2 3 4],因为它也存在于Q2 中。 注意:元胞数组可能有不同的列数...

【问题讨论】:

  • 我想要具有相同值的元素的索引。例如: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 相同”

标签: matlab cell cell-array


【解决方案1】:

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

【讨论】:

  • 非常感谢。这很有用。
  • 对不起。我在使用上述解决方案时遇到问题。我的单元格数组的列数不同。我得到了错误:输入 A 和 B 在“行”的情况下必须是具有相同列数的矩阵。
  • @Bahar 如果他们真的如你所说,randperm 的整数没有。那么元胞数组中的每个矩阵将始终具有相同的列数。提供满足所述条件并给出您提到的错误的Q1Q2 样本
  • 例如,我有 A_C2,它是一个 1*1 单元格,它的元素是 {[]} 并且第二个单元格数组是一个 1*2 单元格,它的元素是 {[],[5 2 3 4 1]}。在我算法的第一步中,单元格数组可能有空数组。错误是:输入 A 和 B 必须是在“行”情况下具有相同列数的矩阵。当我输入:Qout = intersect(vertcat(A_C2{1}), vertcat(k_C2{2}), 'rows')
  • @Bahar 空数组不能作为整数的 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];

%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

【讨论】:

  • OP 有两个元胞数组,不是简单的矩阵
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2020-04-29
  • 2021-12-20
相关资源
最近更新 更多