MATLAB Eliminar NaN del vector

Ammar Ali 20 junio 2023
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.

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

Artículo relacionado - MATLAB Vector