2

我从 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
4

5 回答 5

5

您可以在没有循环的情况下获得这样的向量:

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

 2     4     6

但是,如果您已经有一个带有零和非 zeroz 的向量,您可以使用以下方法轻松删除零条目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));
于 2012-10-02T10:41:46.623 回答
5

要仅显示非零结果,您可以使用nonzeros

iseven = [0     2     0     4     0     6]

nonzeros(iseven)

ans =

     2     4     6
于 2012-10-02T12:21:29.557 回答
3

您下载的代码似乎是计算范围的冗长方法

2:2:length(n)

如果您只想返回名为的向量中的偶数值,请iseven尝试以下表达式:

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

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

iseven = iseven(iseven~=0)
于 2012-10-02T10:50:42.883 回答
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
于 2012-10-02T19:07:13.470 回答
0

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

iseven(iseven==0)=[]
于 2014-04-03T13:56:10.567 回答