Evaluation of a for loop
Ältere Kommentare anzeigen
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
Akzeptierte Antwort
Weitere Antworten (2)
Wayne King
am 13 Aug. 2012
Bearbeitet: Wayne King
am 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
1 Kommentar
Jürgen
am 13 Aug. 2012
Azzi Abdelmalek
am 13 Aug. 2012
Bearbeitet: Azzi Abdelmalek
am 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)
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!