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/