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

标签 matlab matlab-compiler

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;

返回数组 logical_idx这是 logical类型,即

- 1如果条件得到验证

- 0如果不是

函数find可用于“查找”满足条件的数组元素:

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循环你需要创建一个新数组并“反转”“if”中的条件,以便识别必须存储在新数组中的原始数组元素(那些......你不必丢弃).

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

希望这对您有所帮助。

卡普拉'

关于matlab - 如何在matlab中将while循环转换为for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37097883/

相关文章:

matlab - Parfor切片变量导致Matlab崩溃

c++ - 将多维 C 数组复制到 Matlab mxArray 类型

matlab - 为什么逻辑 'explode'在pie3中不起作用?

matlab - 删除对象句柄并保留 MATLAB 中的变量

excel - 如何在matlab中制作像excel频率函数一样的频率函数?

python - 'matlab.object' 对象无法使用 matlab 引擎调用

matlab - 在MATLAB中查找已编译应用的路径

c - 为什么我在使用 MATLAB 编译器时没有看到显着的加速?

matlab - 独立 matlab 应用程序的 "Out of memory"错误 - 内存碎片