2012-10-02 50 views
2

我有一个从网络的matlab脚本,从初始值生成偶数。这是代码。Matlab从阵列中删除不需要的数字

n = [1 2 3 4 5 6]; 
iseven = []; 
for i = 1: length(n); 
if rem(n(i),2) == 0 
iseven(i) = i; 
else iseven(i) = 0; 
end 
end 
iseven 

,其结果是该

iseven = 

    0  2  0  4  0  6 
的结果我得到两个甚至数和零

,有没有什么办法可以去除零和得到这样

iseven = 

     2 4  6 
结果

回答

5

仅显示非零的结果,你可以使用nonzeros

iseven = [0  2  0  4  0  6] 

nonzeros(iseven) 

ans = 

    2  4  6 
+0

整洁,不知道'nonzeros'。 –

5

你可以得到这样的载体没有你有的循环:

n(rem(n, 2)==0) 
ans = 

2  4  6 

不过,如果你已经有了零和非zeroz载体,uou可以很容易地使用find删除零个条目:

iseven = iseven(find(iseven)); 

find大概是最常用的MATLAB的功能之一。它返回非零项的指数在向量和矩阵:

% indices of non-zeros in the vector 
idx = find(iseven); 

如果使用两个输出参数,您可以用它来获得行/列指数矩阵:

% row/column indices of non-zero matrix entries 
[i,j] = find(eye(10)); 
3

你的代码下载的似乎是计算范围

2:2:length(n) 

如果你想在矢量只返回偶数值的长篇大论方式称为iseven试试这个EXP ression:

iseven(rem(iseven,2)==0) 

最后,如果你真的想从一个数组中删除0 S,试试这个:

iseven = iseven(iseven~=0) 
+0

为什么find()方法,为什么不ISEVEN(ISEVEN == 0)= [ ] ...或iseven = iseven(iseven〜= 0)如果表现是一个问题? – Dan

+0

好问题@丹。继续编辑答案以提高良好度。 –

+1

@Dan:我做了你建议的编辑,你自己的尝试似乎陷入了审查,我无法弄清楚如何批准它。 –

0

当你找到你想要的东西时,添加到该向量的末尾。

n = [1 2 3 4 5 6]; 
iseven = []; % has length 0 
for i = 1: length(n); 
    if rem(n(i),2) == 0 
    iseven = [iseven i]; % append to the vector 
    end 
end 
iseven 
0

要从我们可以使用下面的命令程序删除所有零,并且命令是 -

iseven(iseven==0)=[]