MATLAB NaN aus Vektor entfernen

Ammar Ali 20 Juni 2023
MATLAB NaN aus Vektor entfernen

In diesem Tutorial wird das Entfernen von NaN-Werten aus einem Vektor mit der isnan()-Funktion von MATLAB behandelt.

MATLAB NaN-Werte aus Vektor entfernen

Die NaN-Werte sind undefinierte Werte, die bei arithmetischen Operationen erzeugt werden. Um NaN-Werte aus einem Vektor zu entfernen, müssen wir ihre Position oder ihren Index finden, und dann können wir den NaN-Wert gleich Null setzen.

Wir können die Funktion isnan() verwenden, die ein logisches Array aus Nullen und Einsen zurückgibt, um die Position von NaN-Werten zu finden. Die Einsen im logischen Array stellen NaN-Werte dar, und die Nullen im Array stellen andere Werte dar.

Angenommen, der Eingabevektor enthält komplexe Werte; Die Funktion isnan() gibt 0 zurück, wenn sowohl der Real- als auch der Imaginärteil NaN nicht enthalten, und 1, wenn Real- oder Imaginärteil Nan enthalten. Wir können die Ausgabe der Funktion isnan() verwenden, um den NaN-Werten einen Null- oder leeren Vektor zuzuweisen.

Lassen Sie uns zum Beispiel einen Vektor erstellen, der NaN-Werte enthält, und sie mit der isnan()-Funktion entfernen. Siehe Code unten.

clc
clear

v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = []

Ausgang:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     2

Im obigen Code ist die Variable i ein logisches Array, das Einsen an der Position von NaN-Werten enthält, und wir haben diese Indexwerte verwendet, um die NaN-Werte gleich dem leeren Vektor zu setzen. Wir können in der obigen Ausgabe sehen, dass die NaN-Werte aus dem Vektor v entfernt werden.

Im obigen Code setzen wir die NaN-Werte gleich einem leeren Vektor, aber wir können sie auch durch andere Werte wie 0 ersetzen. Lassen Sie uns zum Beispiel die NaN-Werte in einem Vektor durch Null ersetzen.

Siehe Code unten.

clc
clear

v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = 0

Ausgang:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     0     2     0

Bedenken Sie, dass wir zwei Vektoren haben, die voneinander abhängen, so wie der erste Wert des ersten Vektors vom ersten Wert des zweiten Vektors abhängt. Es gibt NaN-Werte in den Vektoren, und wir wollen sie und den entsprechenden Wert des anderen entfernen, weil die beiden Vektoren voneinander abhängen.

Wir wollen auch, dass die Ausgabevektoren die gleiche Größe haben.

Wir müssen die NaN-Werte des ersten Vektors und die entsprechenden Werte des zweiten Vektors entfernen, auch wenn sie keine NaN-Werte sind, und dann müssen wir dasselbe mit dem zweiten Vektor machen. Es kann eine andere Methode geben, bei der wir den Index der NaN-Werte finden, die in beiden Vektoren vorhanden sind, und dann können wir ihr logisches ODER verwenden, um die beiden Werte zu kombinieren, und dann können wir das kombinierte Ergebnis zum Entfernen oder Ersetzen verwenden die NaN-Werte.

Lassen Sie uns zum Beispiel zwei Vektoren erstellen und ihren NaN-Wert und die entsprechenden Werte, die in beiden Vektoren vorhanden sind, entfernen. Siehe Code unten.

clc
clear

v1 = [1 2 nan 2 nan]
v2 = [NaN 1 0 2 5]
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 | i2
v1(i) = []
v2(i) = []

Ausgang:

v1 =

     1     2   NaN     2   NaN


v2 =

   NaN     1     0     2     5


i =

  1×5 logical array

   1   0   1   0   1


v1 =

     2     2


v2 =

     1     2

Im obigen Code haben wir das Symbol | verwendet. für logisches ODER, um die beiden logischen Arrays zu kombinieren. Wir können in der obigen Ausgabe sehen, dass die Ausgabevektoren keine NaN-Werte haben und ihre Größe gleich ist.

Wenn wir NaN-Werte nur dann entfernen wollen, wenn sie in beiden Vektoren an derselben Position vorhanden sind, können wir anstelle des logischen OR das logische AND verwenden. Lassen Sie uns zum Beispiel zwei Vektoren erstellen und den Wert NaN nur dann aus ihnen entfernen, wenn die Werte am selben Index vorhanden sind.

Siehe Code unten.

clc
clear

v1 = [1 2 nan 2 nan];
v2 = [1 0 nan 5 6];
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 & i2;
v1(i) = []
v2(i) = []

Ausgang:

v1 =

     1     2     2   NaN


v2 =

     1     0     5     6

In der obigen Ausgabe ist der erste NaN-Wert beider Vektoren an derselben Position vorhanden und wurde in der Ausgabe entfernt. Der zweite NaN-Wert wird nicht entfernt, weil sein entsprechender Wert nicht NaN ist.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - MATLAB Vector