2016-05-04 63 views

回答

3

NaNInf看起來像特殊變量,當使用時沒有括號。但是他們是actually functions

NaN(ones (1, 3))展開爲NaN ([1, 1, 1]),其明顯評估爲NaN (1, 1, 1)。這是一個1x1x1數組,它只有一個元素。

初始化1×3陣列的NaN正確的方法是

NaN (1, 3) 

同樣爲Inf


繼@carandraug建議,這裏是一個輕微的題外話。人們也可以使用NaN()(ones(1, 3))

在此表達式中,NaN()評估爲NaN標量值(不再是函數)。 ones(1, 3)評估爲[1, 1, 1]

因此,中間步驟可以被解讀爲<NaN scalar value>([1 1 1])

然後記得how indexing works。 使用整數indexes編寫的數組的索引編寫爲A(indexes)。例如

A([i1, i2, i3]) 

此準備相同尺寸的陣列作爲indexes(1×3這裏)。這個新數組的每個元素將得到具有indexes的對應元素給出的索引的元素A的值。也就是說

[A(i1), A(i2), A(i3)] 

所以2(ones (1, 3))結果,即2([1, 1, 1])顯然是[2(1), 2(1), 2(1)]。即[2, 2, 2]。 (記住一個標量可以解釋爲單個元素數組,因此2(1)表示數組[2]的第一個元素,即2)。

同樣地,中間步驟<NaN scalar value>([1 1 1])最終轉化在

[<NaN scalar value>, <NaN scalar value>, <NaN scalar value>] 

或簡單地[NaN, NaN, NaN]

+2

可能值得解釋另一方面,如何用相同的語法來處理'Inf'和'NaN'等。例如'Inf()(ones(1,3))'。 – carandraug

+0

或者'NaN(size(ones(1,3)))''即使它是多餘的。 @carandraug:'Inf()(ones(1,3))'是無效的Matlab。不確定你的建議。 – horchler

+2

@horchler我只是在暗示這將是一個很好的補充(僅來自教育POV)來解釋爲什麼'2([111])'工作並且顯示與'Inf()([1 1 1])'。再次,只有教育,答案是正確的。此外,這是一個沒有用Matlab標記的Octave問題,因此無效Matlab應該不成問題。 – carandraug