【问题标题】:How to compare every row of a matrix to his uppers and lowesr neighbours rows in matlab?如何将矩阵的每一行与他在matlab中的上下相邻行进行比较?
【发布时间】:2014-08-16 06:04:31
【问题描述】:

我需要帮助开发一个将矩阵的每一行与其 5 个邻居(上下)进行比较的函数。如果每行的前 3 个元素相同,则两行相同。
例如:

1  2  3  4 2  3  4

5  6  7  8 3  6  7

1  2  3  1 2  3  4

2 3 4  1  2   1  2

5  0  7  8 3  6  7

9  6  6  8 3  6  7

在将这个矩阵的每一行与它的邻居(5 行)进行比较后,我们必须发现第一行和第三行是相同的,因为每 2 行的前 3 个元素是相同的。 感谢您的帮助。

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    您可以使用bsxfun 将每一行与其他行进行比较(仅取前三列:

    equal = squeeze(all(bsxfun(@eq, M(:,1:3).', permute(M(:,1:3),[2 3 1]))));
    

    在你的例子中,这给出了

    equal =
         1     0     1     0     0     0
         0     1     0     0     0     0
         1     0     1     0     0     0
         0     0     0     1     0     0
         0     0     0     0     1     0
         0     0     0     0     0     1
    

    告诉你第一行等于它自己和第三行;第二行只等于它本身,等等。

    【讨论】:

    • 完美!但我只想将每一行与 5 个邻居(上下)进行比较,这意味着“相等”必须只包含 5 行和列 ..谢谢!
    【解决方案2】:

    假设您的矩阵称为M,第一步是只考虑前 3 列:

    m = M(:,1:3)
    

    接下来我们可以构建一个距离矩阵,然后选择距离为 0 的对。如果你有统计工具箱,那么它真的很简单:

    D = squareform(pdist(m))
    

    如果您没有该工具箱,请查看以下答案以寻找替代方案:Operations with arrays in Matlab

    现在只需找到零:

     %//Note only lower triangular zeros are relevant
     [A, B] = find(tril(~D,-1))
     pairs = [A,B]
    

    【讨论】:

      猜你喜欢
      • 2017-08-15
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多