【问题标题】:How do I delete the intersection of sets A and B from A without sorting in MATLAB?如何从 A 中删除集合 A 和 B 的交集而不在 MATLAB 中排序?
【发布时间】:2011-03-28 21:58:45
【问题描述】:

两个矩阵,A 和 B:

A = [1 2 3
     9 7 5
     4 9 4
     1 4 7]

B = [1 2 3
     1 4 7]

矩阵 B 的所有行都是矩阵 A 的成员。我希望从 A 中删除 A 和 B 的公共行而不进行排序。

我试过 setdiff() 但这会对输出进行排序。

对于我的特殊问题(蛋白质结构中的原子坐标),保持行的有序完整性很重要。

【问题讨论】:

    标签: sorting matlab set-difference


    【解决方案1】:

    使用ISMEMBER:

    %# find rows in A that are also in B
    commonRows = ismember(A,B,'rows');
    
    %# remove those rows
    A(commonRows,:) = [];
    

    【讨论】:

    • 我爱ismember!我到处都能找到它的用途!
    【解决方案2】:

    我不得不在两个数组之间创建差异而不对数据进行排序。我在 matlab 文档中发现了这个很棒的选项。 Setdiff function

    这是函数[C,ia] = setdiff(___,setOrder)的定义 如果您不想对输出数据进行排序,请使用“稳定”,否则使用“排序”或不使用参数。

    这是我的用例。

    yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
    yDataBefore = ScopeDataY;
    

    【讨论】:

    • 感谢您的简单解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多