【问题标题】:How to convert while loop into for loop in matlab?如何在matlab中将while循环转换为for循环?
【发布时间】:2016-09-03 00:46:51
【问题描述】:
i=1;  
while i:length(array)
    if (array(i)<=1000)
        array(i)=[];
    else
        i=i+1;
    end
end

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

【问题讨论】:

    标签: matlab matlab-compiler


    【解决方案1】:

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

    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:您要在其中查找要删除的元素&lt;= 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
    

    希望这会有所帮助。

    卡普拉'

    【讨论】:

    • il_raffa 如果我使用选项 1。是否可以删除元素
    • 很高兴我对你有用。今天晚些时候,我可以为您提供问题的答案(通过索引属性从另一个数组中删除其他元素)。
    • 我来了。我已经更新了答案以解决您的问题(通过索引属性从另一个数组中删除其他元素)。
    【解决方案2】:

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

    for i=1:length(array)
    
       some code here
    end
    

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

    array(array<1000)=[];
    

    该解决方案也可能会更快且更易于理解。

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2018-03-19
        • 2018-02-22
        • 2017-04-26
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        相关资源
        最近更新 更多