2016-05-04 6 views

Antwort

3

NaN und Inf aussehen wie spezielle Variablen, wenn ohne Klammern verwendet.

Aber sie sind actually functions.

NaN(ones (1, 3)) erweitert auf NaN ([1, 1, 1]), die offenbar wie NaN (1, 1, 1) ausgewertet wird. Das ist ein 1x1x1 Array, das nur ein einzelnes Element hat.

Der richtige Weg, um eine 1x3 NaN Array zu initialisieren ist

NaN (1, 3) 

Das Gleiche gilt für Inf.


@carandraug Vorschlag folgend, hier ist eine leichte Abschweifung.

Man könnte auch NaN()(ones(1, 3)) verwenden.

In diesem Ausdruck wertet NaN() den skalaren Wert NaN aus (keine Funktion mehr). ones(1, 3) wertet [1, 1, 1] aus.

So könnte ein Zwischenschritt als <NaN scalar value>([1 1 1]) gelesen werden.

Dann erinnere dich an how indexing works. Indizierung eines Arrays A mit einem Array von ganzen Zahlen indexes wird A(indexes) geschrieben. Zum Beispiel

A([i1, i2, i3]) 

Dies bereitet eine Reihe von der gleichen Größe wie indexes (1x3 hier). Jedes Element dieses neuen Arrays erhält den Wert des Elements A mit dem Index, der durch das entsprechende Element indexes angegeben wird. Das ist

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

So das Ergebnis 2(ones (1, 3)), das heißt 2([1, 1, 1]) ist offensichtlich [2(1), 2(1), 2(1)]. d.h. [2, 2, 2]. (Denken Sie daran, dass ein Skalar als ein einzelnes Element Array interpretiert werden kann. Also 2(1) bedeutet erstes Element des Arrays [2], die 2 ist).

ähnlich der Zwischenschritt <NaN scalar value>([1 1 1]) wird schließlich in

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

oder einfach [NaN, NaN, NaN].

+2

Es könnte sich lohnen, die andere Seite zu erklären, wie die gleiche Syntax verwendet werden könnte, um mit 'Inf' und' NaN' zu arbeiten, z.g., 'Inf() (Ein (1, 3))'. – carandraug

+0

Oder vielleicht 'NaN (Größe (Einsen (1,3)))' obwohl es überflüssig ist. @carandraug: 'Inf() (Einser (1, 3))' ist ungültig Matlab. Ich bin mir nicht sicher, was Sie vorschlagen. – horchler

+2

@horchler Ich habe nur vorgeschlagen, dass es eine nette Ergänzung (nur von einem pädagogischen POV) wäre, zu erklären, warum '2 ([1 1 1])' funktioniert und die exakt gleiche Syntax mit 'Inf() ([1 1 1]) '. Wiederum nur lehrreich, die Antwort ist richtig wie sie ist. Auch diese Octave-Frage, die nicht mit Matlab getaggt ist, sollte nicht als ein ungültiges Matlab angesehen werden. – carandraug