根据对象排名细分矩阵行

时间:2014-10-26 10:24:40

标签: performance matlab matrix

我想更新this question中的问题,该问题与this question中的建议部分相关。

M为MATLAB矩阵,例如:

1 2 3
1 2 4
3 2 5
3 5 4
1 4 5

我想将有效两行中的M行细分,以便:

  • 在第一组M(A>B)中有所有行:
    • 元素A的排名高于元素B(如果两个元素都存在)
    • 或元素A存在且元素B不存在
    • 或者元素AB都不存在
  • 在第一组M(B>A)中有所有行:
    • 元素B的排名高于元素A(如果两个元素都存在)
    • 或元素B存在且元素A不存在
    • 或者元素AB都不存在

在上面的示例中,如果A=2B=3,则第一组M(A>B)定义为:

1 2 3
1 2 4
1 4 5

,而第二组M(B>A)定义为:

3 2 5
3 4 5
1 4 5

请注意,在我的情况下,矩阵M非常大,因此基于ismember的解决方案不够快。

1 个答案:

答案 0 :(得分:1)

试试这个:

[val2, ind] = max((M==A) | (M==B), [], 2);
val1 = val2;
val1(val1) = M((ind(val1)-1)*size(M,1) + find(val1))==B;
set1 = M(~val1, :);
val2(val2) = M((ind(val2)-1)*size(M,1) + find(val2))==A;
set2 = M(~val2, :);