Loop through a vector with changing legth

조회 수: 3 (최근 30일)
Alex De C
Alex De C 2018년 3월 22일
편집: Stephen23 2018년 3월 22일
Hello everyone. I want to loop through a vector, say z, and at each iteration remove some elements from it, using something like
z = z(abs(z-z(i)>=1))
My problem is, I don't know how to form the loop. I tried using
for member = z
but then again, I need to do calculations with each element so that doesn't work. Can anyone help me?

채택된 답변

KL
KL 2018년 3월 22일
why not use a while loop?
idx = 1;
while idx<=numel(z)
%do something
z = z(abs(z-z(idx)>=1));
idx = idx+1;
end
  댓글 수: 2
Alex De C
Alex De C 2018년 3월 22일
Ok yes I feel so stupid now :D
Stephen23
Stephen23 2018년 3월 22일
편집: Stephen23 2018년 3월 22일
"I need to do calculations with each element so that doesn't work"
Neither does this answer. This answer does not "do calculations with each element" as the question requests, it actually misses calculating with elements that follow any removed element that happens to be one position more than the current index (because the element removal and the index increment both conspire against its author).
Compare with this simple example, following the same concept, to remove all even values from z:
z = [1,1,2,2,3,3,4,4,4,5];
idx = 1;
while idx<=numel(z)
if mod(z(idx),2)==0
z(idx)=[];
end
idx = idx+1;
end
but at the end there are still even values in the vector!:
>> z
z =
1 1 2 3 3 4 5
Actually it did not test all elements to check if they are even! In general not all elements get tested by this algorithm although in some special cases they might be.
See Jan Simon's answer for a correct analysis of this problem.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jan
Jan 2018년 3월 22일
A loop over the elements of a vector cannot work, if you remove elements of the vector, except if you process the elements from the end to the start and remove only elements, which are after the current element.
z = rand(1, 10)
for k = 9:-1:1
if z(k) < 0.5
z(k+1) = [];
end
end
This cannot work, if you run it in the opposite direction from 1 to 9.
So what does "loop through a vector" exactly mean, if you remove elements? It cannot be an "element by element". What should happen exactly with the vector? You have to define this clearly, before it can be implemented.
  댓글 수: 1
Alex De C
Alex De C 2018년 3월 22일
Thanks for the reply. The thing is, I calculate something for each element and depending on the result, i remove it and its ajdustents. I will try it with a while loop, I think it will work

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by