我想更新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
不存在A
和B
都不存在M(B>A)
中有所有行:
B
的排名高于元素A
(如果两个元素都存在)B
存在且元素A
不存在A
和B
都不存在在上面的示例中,如果A=2
和B=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
的解决方案不够快。
答案 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, :);