陣列索引可用於efficient array preallocation。例如NaN或Inf陣列預分配
2(ones(1, 3))
ans =
2 2 2
但是這並不NaN或天道酬勤
NaN(ones(1, 3))
ans = NaN
爲什麼工作?
陣列索引可用於efficient array preallocation。例如NaN或Inf陣列預分配
2(ones(1, 3))
ans =
2 2 2
但是這並不NaN或天道酬勤
NaN(ones(1, 3))
ans = NaN
爲什麼工作?
NaN
和Inf
看起來像特殊變量,當使用時沒有括號。但是他們是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]
。
可能值得解釋另一方面,如何用相同的語法來處理'Inf'和'NaN'等。例如'Inf()(ones(1,3))'。 – carandraug
或者'NaN(size(ones(1,3)))''即使它是多餘的。 @carandraug:'Inf()(ones(1,3))'是無效的Matlab。不確定你的建議。 – horchler
@horchler我只是在暗示這將是一個很好的補充(僅來自教育POV)來解釋爲什麼'2([111])'工作並且顯示與'Inf()([1 1 1])'。再次,只有教育,答案是正確的。此外,這是一個沒有用Matlab標記的Octave問題,因此無效Matlab應該不成問題。 – carandraug