2

配列の索引付けは、効率的な配列の事前割り当てに使用できます。例えば

2(ones(1, 3))
ans =

   2   2   2

ただし、これは NaN または Inf では機能しません

NaN(ones(1, 3))
ans = NaN

なんで ?

4

1 に答える 1

3

NaNInfかっこなしで使用すると、特殊変数のように見えます。

しかし、それらは実際には関数です。

NaN(ones (1, 3))NaN ([1, 1, 1])どうやら のように評価されるように展開されNaN (1, 1, 1)ます。つまり1x1x1、要素が 1 つしかない配列です。

1x3 NaN 配列を初期化する正しい方法は次のとおりです。

NaN (1, 3)

についても同じですInf


@carandraug の提案に従って、ここに少し余談があります。

も使用できますNaN ()(ones(1, 3))

この式では、スカラー値にNaN ()評価されます (もはや関数ではありません)。に評価されます。NaNones(1, 3)[1, 1, 1]

したがって、中間ステップは と読むことができます<NaN scalar value>([1 1 1])

次に、索引付けの仕組みを思い出してください。A整数の配列を持つ配列のインデックス付けindexesが書かれ​​てA(indexes)います。例えば

A([i1, i2, i3])

indexesこれにより、 (ここでは 1x3)と同じサイズの配列が用意されます。この新しい配列の各要素はA、 の対応する要素によって指定されたインデックスを持つ の要素の値を取得しますindexes。あれは

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

したがって2(ones (1, 3))、 ieの結果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].

于 2016-05-04T13:28:32.000 に答える