2013-07-30 27 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行列は1つの(空の)列を持つので、ループは単にそれを越えます。例外は、空行列のために言及されていないので、から分かるように、ここで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

あなたは 't = t''を意味しますか? –

関連する問題