如何在matlab中将while循环转换为for循环?

时间:2016-05-08 08:39:08

标签: matlab matlab-compiler

{{1}}

这是一个matlab代码。任何人都可以告诉我如何将其转换为for循环。

3 个答案:

答案 0 :(得分:3)

你实际上不需要循环;你可以删除元素"< = 1000"通过使用MatLab索引属性:

array(array <= 1000)=[]

编辑以回答评论中的问题

通过索引属性

从其他数组中删除其他元素

要删除与第一个数组中要删除的数组位于同一位置的另一个数组的元素,必须存储这些位置索引,然后使用它们来处理第二个数组的元素:

当您在第一个数组中查找索引时,可以将它们评估为logical索引或double索引:

指示:

logical_idx=array <= 1000;

返回logical_idx类型的数组logical,即

- 1如果条件已经过验证

- 0如果不是

函数find可用于&#34;查找&#34;符合条件的数组元素:

double_idx=find(array <= 1000)

在这种情况下,返回的数组为double类型。

当您使用logical索引访问数组的元素时,所选的那些是与逻辑数组中的1对应的那些元素。例如,如果logical索引数组是:

[0 1 1 0 0]

第二个将选择第三个元素。

使用double索引时,将考虑索引指定的位置进行访问。对于前面的示例,索引数组的double版本将为:

[2 3]

一旦确定了索引(通过使用上述两种方法之一),您就可以使用它们来访问不同数组的元素。

假设您有三个阵列:

  • array:您正在寻找要删除的元素<= 1000

  • array_1:您要从中删除与array

  • 中删除的元素位于同一位置的元素的第二个数组
  • array_11:类似于array_1

这是一个使用这两种方法的例子:

% Identify the logical indexes of the element to be removed
logical_idx=array <= 1000;
% Identify the integer indexes of the element to be removed
double_idx=find(array <= 1000);

% Remove the unwanted elements by "direct" indexing
array(array <= 1000)=[]
% Remove unwanted elements using logical indexes
array_1(logical_idx)=[]
% Remove unwanted elements using integer indexes
array_11(double_idx)=[]

结束修改

如果你想使用for循环,你需要创建一个新数组,并且#34;反向&#34; &#34;如果&#34;为了识别原始数组中必须存储在新arrray中的元素(那些......你不要丢弃它们)。

array_2=[];
cnt=0;
for i=1:length(array)
   if(array(i) > 1000)
      cnt=cnt+1;
      array_2(cnt)=array(i);
   end
end

希望这有帮助。

Qapla&#39;

答案 1 :(得分:1)

试试这个:

for i=1:1:size(array,1)*size(array,2)
    if array(i)<=1000
        array(i)=0;
    end
end
array = nonzeros(array)

答案 2 :(得分:0)

您可以使用以下代码将代码转换为for循环。

for i=1:length(array)

   some code here
end

查看您的代码,您可能希望将其重写为矩阵运算。看起来您的代码正在删除少于1000的任何内容,在这种情况下,您应该使用MATLABs数组索引功能来删除这些值(见下文)。

array(array<1000)=[];

解决方案可能会更快,更容易理解。