根据特定条件从矩阵中删除行

时间:2014-01-28 11:57:33

标签: matlab matrix conditional

我有一个矩阵65536x8,包含所有可能的值组合 - 45 90 135 180(8列)。

我需要删除所有不包含所有四个值的行(每行不能缺少任何这些值)。

这是我尝试过的(不工作):

>> orient(orient(numel(orient(:,1))) == 45 && 90 && 135 && 180,:)

ans =

   Empty matrix: 0-by-8

在MATLAB中有一些有效的方法吗?

1 个答案:

答案 0 :(得分:1)

这应该让你知道如何去做:

A = [1 1 1
     1 1 2
     1 1 3
     1 2 1
     1 2 2
     1 2 3
     1 3 1
     1 3 2 
     1 3 3
     2 1 1
     2 1 2
     2 1 3];


A(any((A == 1)') & any((A == 2)') & any((A == 3)'),:)

ans =

   1   2   3
   1   3   2
   2   1   3

或者通常使用循环(只有4个数字,这应该非常快):

rows = true(size(A,1),1);              %// Initialization
U = unique(A);                         %// List of numbers
for n = 1:size(U,1)
    rows = rows & any((A == U(n))')';
end
A(rows,:)