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.