【问题标题】:Find and Exclude one Matrix from other从另一个矩阵中查找并排除一个矩阵
【发布时间】:2014-03-17 18:49:58
【问题描述】:

我正在研究 MATLAB。我有以下矩阵

A = [
    1 2 3 4
    5 6 7 8
    1 5 2 3
    6 7 8 9
    1 3 6 2
    6 3 1 6
    9 7 4 7
];

B = [
    1 5 2 3
    6 7 8 9
];

我要找A-B 所以答案应该是这样的,

ans = [
    1 2 3 4
    5 6 7 8
    1 3 6 2
    6 3 1 6
    9 7 4 7
];

【问题讨论】:

    标签: matlab matrix discrete-mathematics set-difference


    【解决方案1】:

    setdiff'rows''stable' 选项一起使用:

    >> C = setdiff(A,B,'rows','stable')
    C =
         1     2     3     4
         5     6     7     8
         1     3     6     2
         6     3     1     6
         9     7     4     7
    

    【讨论】:

      【解决方案2】:

      使用ismember 查找公共行并忽略最后output 中的那些。

      代码

      out = A(~ismember(A,B,'rows'),:)
      

      输出

      out =
      
           1     2     3     4
           5     6     7     8
           1     3     6     2
           6     3     1     6
           9     7     4     7
      

      【讨论】:

        【解决方案3】:
        clear;
        s=0;
        A = [
        
            1 2 3 4
            5 6 7 8
            1 5 2 3
            6 7 8 9
            1 3 6 2
            6 3 1 6
            9 7 4 7
        ];
        
        B = [
        
            1 5 2 3
            6 7 8 9
        ];
        
        for i=1:size(B)
        
        s=s+(ismember(A, B(i,:), 'rows'))
        
        end
        
        A_B = A(s==0,:)
        

        【讨论】:

          【解决方案4】:

          @Divakar@chappjc's 答案是必经之路。

          但我忍不住邀请bsxfun参加聚会:

          C = A(~any(squeeze(all(bsxfun(@eq, A.', permute(B, [2 3 1])))).'),:);
          

          它的朋友pdist2也来了:

          C = A(all(pdist2(A, B, 'hamming').'),:);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-27
            • 1970-01-01
            • 2022-11-21
            • 2011-02-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多