如何在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_idx
是logical
类型,即
-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)
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_idx
是logical
类型,即
-1
如果条件被验证
-0
如果不是
函数find
可用于"find"满足条件的数组元素:
double_idx=find(array <= 1000)
在这种情况下,返回的数组是 double
类型。
使用logical
索引访问数组元素时,选择的是逻辑数组中1
对应的元素。例如,如果 logical
索引数组是:
[0 1 1 0 0]
将选择第二个和第三个元素。
当您使用double
索引时,将根据索引指定的位置进行访问。关于前面的示例,索引数组的 double
版本将是:
[2 3]
一旦您确定了索引(通过使用上述两种方法之一),您就可以使用它们来访问不同数组的元素。
假设你有三个数组:
array
:你要查找的元素<= 1000
要被移除的那个
[=95= 中删除的元素相同位置的元素]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
循环,则需要创建一个新数组和 "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)