MATLAB Eliminar NaN del vector
Este tutorial analizará la eliminación de valores NaN
de un vector utilizando la función isnan()
de MATLAB.
MATLAB Eliminar valores NaN
del vector
Los valores NaN
son valores indefinidos que se generan en el caso de operaciones aritméticas. Para eliminar los valores NaN
de un vector, tenemos que encontrar su posición o índice, y luego podemos establecer el valor NaN
igual a nulo.
Podemos usar la función isnan()
, que devuelve una matriz lógica de ceros y unos para encontrar la posición de los valores NaN
. Los unos en la matriz lógica representan valores NaN
, y los ceros en la matriz representan otros valores.
Supongamos que el vector de entrada contiene valores complejos; la función isnan()
devuelve 0 cuando tanto la parte real como la imaginaria no contienen NaN
y 1 cuando la parte real o imaginaria contiene Nan
. Podemos usar la salida de la función isnan()
para asignar los valores NaN
a un vector nulo o vacío.
Por ejemplo, creemos un vector que contenga valores NaN
y eliminémoslos usando la función isnan()
. Vea el código a continuación.
clc
clear
v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = []
Producción :
v =
1 2 NaN 2 NaN
i =
1×5 logical array
0 0 1 0 1
v =
1 2 2
En el código anterior, la variable i
es una matriz lógica que contiene unos en la posición de los valores NaN
, y usamos estos valores de índice para establecer los valores NaN
iguales al vector vacío. Podemos ver en la salida anterior que los valores NaN
se eliminan del vector v
.
En el código anterior, establecemos los valores de NaN
iguales a un vector vacío, pero también podemos reemplazarlos con otros valores como 0. Por ejemplo, reemplacemos los valores de NaN
en un vector con cero.
Vea el código a continuación.
clc
clear
v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = 0
Producción :
v =
1 2 NaN 2 NaN
i =
1×5 logical array
0 0 1 0 1
v =
1 2 0 2 0
Considere que tenemos dos vectores que dependen el uno del otro, como el primer valor del primer vector depende del primer valor del segundo vector. Hay valores NaN
en los vectores, y queremos eliminarlos y el valor correspondiente del otro porque los dos vectores dependen el uno del otro.
También queremos que los vectores de salida tengan el mismo tamaño.
Tenemos que quitar los valores NaN
del primer vector y los valores correspondientes del segundo vector aunque no sean valores NaN
, y luego tenemos que hacer lo mismo con el segundo vector. Puede haber otro método en el que podemos encontrar el índice de los valores NaN
presentes en ambos vectores, y luego podemos tomar su O
lógico para combinar los dos valores, y luego podemos usar el resultado combinado para eliminar o reemplazar los valores NaN
.
Por ejemplo, creemos dos vectores y eliminemos su valor NaN
y los valores correspondientes presentes en ambos vectores. Vea el código a continuación.
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) = []
Producción :
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
En el código anterior, usamos el símbolo |
para el O
lógico para combinar las dos matrices lógicas. Podemos ver en la salida anterior que los vectores de salida no tienen valores NaN
, y su tamaño es igual.
Si queremos eliminar los valores NaN
solo si están presentes en ambos vectores en la misma posición, podemos usar el AND
lógico en lugar del OR
lógico. Por ejemplo, creemos dos vectores y eliminemos el valor NaN
de ellos solo si los valores están presentes en el mismo índice.
Vea el código a continuación.
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) = []
Producción :
v1 =
1 2 2 NaN
v2 =
1 0 5 6
En la salida anterior, el primer valor NaN
de ambos vectores está presente en la misma posición y se elimina en la salida. El segundo valor NaN
no se elimina porque su valor correspondiente no es NaN
.