我有一个来自net的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
答案 0 :(得分:5)
你可以在没有循环的情况下获得这样的载体:
n(rem(n, 2)==0)
ans =
2 4 6
但是,如果您已经有一个零和非零的向量,则可以使用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));
答案 1 :(得分:5)
要仅显示非零结果,您可以使用nonzeros
iseven = [0 2 0 4 0 6]
nonzeros(iseven)
ans =
2 4 6
答案 2 :(得分:3)
您下载的代码似乎是计算范围的冗长方式
2:2:length(n)
如果您只想在名为iseven
的向量中返回偶数值,请尝试以下表达式:
iseven(rem(iseven,2)==0)
最后,如果您确实要从数组中删除0
,请尝试以下操作:
iseven = iseven(iseven~=0)
答案 3 :(得分: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
答案 4 :(得分:0)
要从程序中删除所有零,我们可以使用以下命令,命令是 -
iseven(iseven==0)=[]