在Matlab中删除数组中的元素

时间:2013-12-01 13:20:56

标签: arrays matlab elements

鉴于,

a = [2 4 6 8 10 0 7 18 9 0 8 2 0 5];
b = [1 3 0 5 70 8 6 87 1 9 7 8 0 2];

我正在尝试删除对应的元素(在'a'和'b'中) 'a'或'b'中的'0'或小于'0',即我想要

 % a = [2 4 8 10 7 18 9 8 2 5];
 % b = [1 3 5 70 6 87 1 7 8 2];

我这样想 -

n = length(b);

a1 = [];
b1 = [];

for k = 1:n
    if a(n) <= 0 || b(n) <= 0 
        a1 = [a; a(a > 0)]   % eliminates 0 from a
        b1 = [b; b(b > 0)]   % eliminates 0 from b
    end
end

任何帮助都会非常有用。

2 个答案:

答案 0 :(得分:0)

使用find

a = [2 4 6 8 10 0 7 18 9 0 8 2 0 5];
b = [1 3 0 5 70 8 6 87 1 9 7 8 0 2];

A = a( find( a > 0 & b > 0 ) );
B = b( find( a > 0 & b > 0 ) );

甚至更快:

C = a(  a > 0 & b > 0  );
D = b(  a > 0 & b > 0  );

返回:

C =

     2     4     8    10     7    18     9     8     2     5
D =

     1     3     5    70     6    87     1     7     8     2

如果您可以肯定,没有值零以下,您也可以使用:

E = a( logical(a) & logical(b) );
F = b( logical(a) & logical(b) );

稍快一些,但也包含负值。

答案 1 :(得分:0)

执行此操作的有效且紧凑的方法是首先创建相关索引,以防止双重计算:

idx = a>0 & b>0

a = a(idx); 
b = b(idx);