efficient array preallocationの配列インデックスを使用できます。例えばNaNまたはInf配列の事前割り当て
2(ones(1, 3))
ans =
2 2 2
はこれがNaNまたはInfの
NaN(ones(1, 3))
ans = NaN
なぜでは動作しませんか?
efficient array preallocationの配列インデックスを使用できます。例えばNaNまたはInf配列の事前割り当て
2(ones(1, 3))
ans =
2 2 2
はこれがNaNまたはInfの
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アレイを初期化するための正しい方法は、Inf
、同じ
NaN (1, 3)
あります。
は@carandraugの提案に続いて、ここで若干余談です。
NaN()(ones(1, 3))
も使用できます。
この式では、NaN()
は、NaN
スカラー値(これ以上の関数ではありません)と評価されます。 ones(1, 3)
は[1, 1, 1]
と評価されます。
中間ステップは<NaN scalar value>([1 1 1])
と読み取ることができます。
次に、how indexing worksを覚えておいてください。 配列の添字A
の配列が整数indexes
の場合A(indexes)
となります。インスタンス
A([i1, i2, i3])
ためこれはindexes
(ここでは1×3)と同じサイズの配列を作成します。この新しい配列の各要素は、対応する要素indexes
によって指定されたインデックスを持つA
の要素の値を取得します。それはすなわち、2([1, 1, 1])
は明らかに[2(1), 2(1), 2(1)]
されているので、
[A(i1), A(i2), A(i3)]
2(ones (1, 3))
の結果です。すなわち[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'でどのように動作するか、e。例えば、「Inf()(ones(1,3))」。 – carandraug
または、おそらく 'NaN(size(ones(1,3)))'といっても余計ですが。 @carandraug: 'Inf()(ones(1、3))'は無効なMatlabです。あなたが何を示唆しているか分かりません。 – horchler
@horchler '2([1 1 1])'がなぜ働いているのかを説明し、 'Inf()([1 1] 1]) ')。再び、教育だけ、答えは正しいです。また、これはMatlabでタグ付けされていないOctaveの質問ですので、Matlabは問題ではありません。 – carandraug