2013-07-30 13 views
24

Zawsze zakładałem, że iteracja pustego wektora przy użyciu pętli for była taka sama jak brak pętli. Jednak natknąłem się tego dziwnego zachowania:Iterowanie pustej macierzy za pomocą pętli for

for t = []   %// Iterate an empty 0x0 matrix 
    1 
end 
for t = ones(1, 0) %// Iterate an empty 1x0 matrix 
    2 
end 
for t = ones(0, 1) %// Iterate an empty 0x1 matrix 
    3 
end 

wynik jest:

ans = 
    3 

Czy jest sens, czy jest to błąd?

Odpowiedz

22

Numer for loop przebiega po wszystkich kolumnach wprowadzanych danych. Ponieważ macierz 0x1 ma jedną (pustą) kolumnę, pętla po prostu przejdzie przez to. Nie ma wyjątków jest mowa o pustych matryc, więc o t będzie po prostu pusta macierz, jak wynika z:

for t = ones(0, 1) %// Iterate over an empty 0x1 matrix 
    size(t) % t is a 0x1 matrix 
end 

jest to bug? Prawdopodobnie nie.
Czy ma to sens? Cóż, myślę, że wolałbym, aby pętla nie była wykonywana, jeśli dane wejściowe są puste, ale prawdopodobnie są również tego zalety.

Przynajmniej jest to zdecydowanie coś, o czym należy pamiętać!

+3

+1: Dobra odpowiedź na dobre pytanie! –

+2

+1 Za niespodzianki z pustymi matrycami ... – bla

+0

masz na myśli 'dla t = t''? –

Powiązane problemy