【发布时间】: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 循环。
【问题讨论】:
i=1;
while i:length(array)
if (array(i)<=1000)
array(i)=[];
else
i=i+1;
end
end
这是一个matlab代码。任何人都可以告诉我如何将其转换为 for 循环。
【问题讨论】:
你实际上不需要循环;您可以使用 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:您要在其中查找要删除的元素<= 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
希望这会有所帮助。
卡普拉'
【讨论】:
您可以使用以下代码将代码转换为 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)
【讨论】: