2013-07-30 42 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''? –