Evaluation of a for loop
Show older comments
hello
is this pseudo code:
for Counter=1:size(M,2)
if someting
delete row from M
end
end
If would expect that if the size of M changing the range of Counter would change do but that does not happen, instead Counter will rang from 1 to the begin size of M
so size(M,2) is not evaluated each time that the loop runs?
I notices with while ...end you do not have the problem or am I completely mistaken?
thanks for any insights
regards,Jürgen
Accepted Answer
More Answers (2)
Wayne King
on 13 Aug 2012
Edited: Wayne King
on 13 Aug 2012
Yes, the for loop termination condition is set the first time you enter the loop
m = 3;
for jj = 1:m
disp('Hi');
m = m-1;
end
but the value of m is zero upon exiting the loop
If you wanted to use the value of size(M,2) to know when to execute the loop, you can use a break()
m = 3;
for jj = 1:m
disp('Hi');
m = m-1;
if (m<2)
break;
end
end
Or a while loop instead of a for
m = 3;
while m>1
disp('Hi');
m= m-1;
end
Azzi Abdelmalek
on 13 Aug 2012
Edited: Azzi Abdelmalek
on 13 Aug 2012
the idea is to:
- replace the rows by "nan"
- at the end remove the rows containing "nan"
A=magic(10) % example
for k=1:size(A,2)
if rand(1)>0.5 % it's just an example
A(:,k)=nan % replace the row by "nan"
end
end
A(:,any(isnan(A)))=[] %remove the rows containing nan
% this code suppose that your initial matrix don't contain nan. if your matrix contain "nan" use instead this code
A=magic(10) % example
A=num2cell(A) % convert to cell
for k=1:size(A,2)
if rand(1)>0.5 % it's just an example
A(:,k)={'remove'} % replace the row by "remove"
end
end
ind=cellfun(@(x) ~isnumeric(x),A)
A(:,find(mean(ind)==1))=[]
A=cell2mat(A)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!