【问题标题】:Remove rows containing duplicate elements删除包含重复元素的行
【发布时间】:2015-10-12 21:58:54
【问题描述】:

我有这个示例矩阵:

1 2 4 5 1 3
2 3 5 6 3 4
1 2 3 4 5 6
3 2 4 6 1 5
...

我需要删除包含重复元素的每一行。在此示例中,我必须删除第一行和第二行。 我知道如何在 for-loop 中执行此操作,但我不想使用 for-loop。

【问题讨论】:

    标签: matlab matrix duplicates vectorization


    【解决方案1】:

    假设 A 作为输入矩阵,你可以这样做 -

    A(all(diff(sort(A,2),[],2),2),:)
    

    示例运行 -

    >> A
    A =
         1     2     4     5     1     3
         2     3     5     6     3     4
         1     2     3     4     5     6
         3     2     4     6     1     5
    >> A(all(diff(sort(A,2),[],2),2),:)
    ans =
         1     2     3     4     5     6
         3     2     4     6     1     5
    

    或者,如果你不介意一些bsxFUN -

    A(~any(sum(bsxfun(@eq,A,permute(A,[1 3 2])),2)>1,3),:)
    

    【讨论】:

    • 我正在测试第一个解决方案,如果一个非常大的 (20*10^6 x 12) 矩阵有点慢,你知道其他解决方案吗?第二种解决方案(bsxFUN)非常非常慢。谢谢!
    • @PietroZ。我会责怪元素的数量如此庞大:) 与您之前的一些 for 循环实现相比,您的意思是更慢吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2013-04-16
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多