例如,给出一个2列矩阵。输入是:
[ 1,2;
3,4;
5,5]
预期输出为:
[1,2;
3,4;]
有谁知道如何做到这一点?非常感谢您的时间和关注。
答案 0 :(得分:2)
您可以使用逻辑索引:
A = [1 2;3 4;5 5];
match = A(:,1) == A(:,2); // 1 where row has the same elements in both columns
A(match,:) = []; // make the match columns empty
对于另一个案例,您需要使其更通用,但对于两列和您的示例,这将起作用。
答案 1 :(得分:2)
您的问题表明您的矩阵可能有任意数量的列。在这种情况下,如果行( a )任意两个元素相等,或者( b )全部,则可能需要删除一行元素相等。
一种可能的方法是:
sort
; diff
计算连续元素之间的差异; all
至( a )保留所有此类差异均为非零的行,或使用any
生成( > b )保留任何此类差异不为零的行:所以:
X = [1 2 3;
3 4 3;
5 5 5];
Y = X(all(diff(sort(X,2),[],2),2),:);
Z = X(any(diff(sort(X,2),[],2),2),:);
给出
Y =
1 2 3
Z =
1 2 3
3 4 3