2016-05-04 14 views

答えて

3

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]に変換されます。

+2

反対側を説明する価値があるかもしれませんが、同じ構文が 'Inf'と' NaN'でどのように動作するか、e。例えば、「Inf()(ones(1,3))」。 – carandraug

+0

または、おそらく 'NaN(size(ones(1,3)))'といっても余計ですが。 @carandraug: 'Inf()(ones(1、3))'は無効なMatlabです。あなたが何を示唆しているか分かりません。 – horchler

+2

@horchler '2([1 1 1])'がなぜ働いているのかを説明し、 'Inf()([1 1] 1]) ')。再び、教育だけ、答えは正しいです。また、これはMatlabでタグ付けされていないOctaveの質問ですので、Matlabは問題ではありません。 – carandraug