【问题标题】:Remove duplicate rows of matrix and cell together in MATLAB在 MATLAB 中一起删除重复的矩阵和单元格行
【发布时间】:2016-02-08 15:23:21
【问题描述】:

我有一个包含 30000 行的矩阵 A 和一个具有相同行号的单元格 B。我想删除重复的行。如果它只是一个矩阵A,我可以使用唯一的函数。但是对于 A(matrix) 和 B(Cell) 一起,我该如何进行?非常感谢!

A 和 B 的例子如下所示。第 4 行和第 5 行是重复的(对于 A 和 B),而第 5 行和第 6 行不应视为重复。

一个

1   2   3   4   
11  12  13  14
21  22  23  24
31  32  33  34
31  32  33  34
31  32  33  34
41  42  43  44

B

a
b
c
d
d
e
f

【问题讨论】:

    标签: matlab duplicates unique


    【解决方案1】:

    您可以使用来自unique 的第二个返回值来执行此操作:

    [C,ia,ic] = unique(A,'rows',setOrder)
    

    ia 为您提供唯一行的A 的索引。如果您在矩阵 A 上执行此操作,您会得到:

    >> [~,iA,~] = unique(A,'rows','first')
    iA =
    
       1
       2
       3
       4
       7
    

    (我使用了选项'first',因为在我看来返回第4行比返回第5行更自然。如果您愿意,可以使用默认的'last',只要您保持一致。)

    由于B 是一个元胞数组,您不需要'rows' 选项:

    >> [~,iB,~] = unique(B,'first')
    iB =
    
       1
       2
       3
       4
       6
       7
    

    这告诉我们,尽管矩阵 A 告诉我们,第 4 行与第 6 行是唯一的。如果我们取这两者的集合并集,我们会得到:

    >> uAB = union(iA,iB)
    uAB =
    
       1
       2
       3
       4
       6
       7
    

    现在您应该拥有所有唯一行的索引:

    >> A(uAB,:)
    ans =
    
        1    2    3    4
       11   12   13   14
       21   22   23   24
       31   32   33   34
       31   32   33   34
       41   42   43   44
    
    >> B(uAB)
    ans =
    {
      [1,1] = a
      [2,1] = b
      [3,1] = c
      [4,1] = d
      [5,1] = e
      [6,1] = f
    }
    

    【讨论】:

    • 感谢@LuisMendo,您的评论让我再次查看我的答案并意识到我为iB 输入了错误的代码。我现在就解决这个问题。
    • 我明白了。没想到
    • @LuisMendo 我只是在警告之后给出了不带'first' 的版本,以与'first''last' 保持一致。 ;)
    猜你喜欢
    • 2013-03-03
    • 2021-11-18
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多