【问题标题】:How to compare a matrix row by row with specified condition如何逐行比较矩阵与指定条件
【发布时间】:2012-10-20 04:15:34
【问题描述】:

我有一个这样的数据矩阵:

A=[ 5   0   10  15  0.021;
    5   0   15  20  0.011;
    10  15  5   0   0.022;
    15  20  5   0   0.009]

我需要将每一行与所有其他行进行比较。标准是: 如果这一行的第 1 列和第 2 列与第二行的第 3 和第 4 列相同,并且如果这一行的第 3 和第 4 列与另一行的第 1 和第 2 列相同,我需要这两行的索引。

例如:

A = [5  0 10 15  *;
     *  *  *  *  *;
     10 15 5  0  *;
     *  *  *  *  *];

如你所见:

  • 第 1 行的第 1 个和第 2 个元素等于第 3 行的第 3 个和第 4 个元素
  • 第 1 行的第 3 个和第 4 个元素等于第 3 行的第 1 个和第 2 个元素

我不想改变矩阵的顺序。

【问题讨论】:

    标签: matlab matrix indexing compare row


    【解决方案1】:

    ismember 可以做到:

    [~,b]=ismember(A(:,1:4),A(:,[3 4 1 2]),'rows');
    ind = find(b);
    ind(:,2) = b(ind(:,1));
    

    ind 将包含冗余条目(例如 [1 2][2 1]),因为您的标准是对称的,您可以使用以下方法过滤它们:

    ind = unique(sort(ind,2),'rows')
    

    【讨论】:

    • 您好 Gunther,您的代码运行良好。我之前尝试使用 buildin ismember 和 unique,但失败了。我想我需要详细查看他们的文档。非常感谢!
    • @Lei:谢谢,确实:阅读文档并亲自尝试。一旦你了解了发生了什么,这一切都很容易;)
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多