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

How to convert while loop into for loop in matlab?

i=1;  
while i:length(array)
    if (array(i)<=1000)
        array(i)=[];
    else
        i=i+1;
    end
end

这是一个matlab代码。谁能告诉我如何将其转换为 for 循环。

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

array(array <= 1000)=[]

编辑以回答评论中的问题

通过索引属性从另一个数组中删除其他元素

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

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

指令:

logical_idx=array <= 1000;

returns数组logical_idxlogical类型,即

-1如果条件被验证

-0如果不是

函数find可用于"find"满足条件的数组元素:

double_idx=find(array <= 1000)

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

使用logical索引访问数组元素时,选择的是逻辑数组中1对应的元素。例如,如果 logical 索引数组是:

[0 1 1 0 0]

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

当您使用double 索引时,将根据索引指定的位置进行访问。关于前面的示例,索引数组的 double 版本将是:

[2 3]

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

假设你有三个数组:

  • array:你要查找的元素<= 1000要被移除的那个

  • array_1:第二个数组,您要从中删除与从 array

    [=95= 中删除的元素相同位置的元素]
  • 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 循环,则需要创建一个新数组和 "reverse" "if" 中的条件,以便识别原始数组中的元素必须存储在新的数组中(那些......你不必丢弃)。

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

希望对您有所帮助。

Qapla'

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

for i=1:length(array)

   some code here
end

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

array(array<1000)=[];

该解决方案可能会更快并且更容易理解。

试试这个:

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