2013-07-30 43 views
24

我總是假設使用for循環迭代空向量與完全沒有循環相同。不過,我偶然發現了這種奇怪的行爲:使用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 

結果是:

ans = 
    3 

是否有意義,或者這是一個錯誤?

回答

22

for loop運行在其輸入的所有列上。由於0x1矩陣有一個(空)列,因此循環將簡單地繼續。也不例外提到空矩陣,所以這裏t只會是空矩陣從看到:

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

它是一個錯誤嗎?可能不會。
它有道理嗎?那麼,我認爲如果輸入是空的,我寧願循環不執行,但也可能有這樣的優點。

至少這是一定要警惕的東西!

+3

+1:一個好問題的好答案! –

+2

+1對於空矩陣的意外... – bla

+0

你的意思是'for t = t''? –