MATLAB 벡터에서 NaN 제거

Ammar Ali 2023년6월20일
MATLAB 벡터에서 NaN 제거

이 자습서에서는 MATLAB의 isnan() 함수를 사용하여 벡터에서 NaN 값을 제거하는 방법에 대해 설명합니다.

MATLAB이 벡터에서 NaN 값 제거

NaN 값은 산술 연산의 경우 생성되는 정의되지 않은 값입니다. 벡터에서 NaN 값을 제거하려면 해당 위치 또는 인덱스를 찾은 다음 NaN 값을 null로 설정할 수 있습니다.

NaN 값의 위치를 찾기 위해 0과 1의 논리 배열을 반환하는 isnan() 함수를 사용할 수 있습니다. 논리 배열의 값은 NaN 값을 나타내고 배열의 0은 다른 값을 나타냅니다.

입력 벡터에 복소수 값이 포함되어 있다고 가정합니다. isnan() 함수는 실수부와 허수부가 모두 NaN을 포함하지 않으면 0을 반환하고 실수 또는 허수부가 Nan을 포함하면 1을 반환합니다. isnan() 함수의 출력을 사용하여 NaN 값에 null 또는 빈 벡터를 할당할 수 있습니다.

예를 들어 NaN 값을 포함하는 벡터를 만들고 isnan() 함수를 사용하여 제거해 보겠습니다. 아래 코드를 참조하십시오.

clc
clear

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

출력:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     2

위의 코드에서 변수 iNaN 값 위치에 1을 포함하는 논리 배열이며 이러한 인덱스 값을 사용하여 NaN 값을 빈 벡터와 동일하게 설정했습니다. 위의 출력에서 NaN 값이 벡터 v에서 제거된 것을 볼 수 있습니다.

위의 코드에서 NaN 값을 빈 벡터로 설정했지만 0과 같은 다른 값으로 바꿀 수도 있습니다. 예를 들어 벡터의 NaN 값을 0으로 바꾸겠습니다.

아래 코드를 참조하십시오.

clc
clear

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

출력:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     0     2     0

첫 번째 벡터의 첫 번째 값이 두 번째 벡터의 첫 번째 값에 따라 달라지는 것처럼 서로 의존하는 두 벡터가 있다고 가정합니다. 벡터에는 NaN 값이 있으며 두 벡터가 서로 의존하기 때문에 이들과 다른 벡터의 해당 값을 제거하려고 합니다.

또한 출력 벡터의 크기가 같기를 원합니다.

첫 번째 벡터의 NaN 값과 NaN 값이 아니더라도 해당하는 두 번째 벡터의 값을 제거한 다음 두 번째 벡터에 대해 동일한 작업을 수행해야 합니다. 두 벡터에 있는 NaN 값의 인덱스를 찾을 수 있는 또 다른 방법이 있을 수 있습니다. 그런 다음 논리 OR을 사용하여 두 값을 결합한 다음 결합된 결과를 사용하여 제거하거나 대체할 수 있습니다. NaN 값.

예를 들어 두 개의 벡터를 만들고 해당 NaN 값과 두 벡터에 있는 해당 값을 제거해 보겠습니다. 아래 코드를 참조하십시오.

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) = []

출력:

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

위의 코드에서 | 기호를 사용했습니다. 논리적 OR은 두 개의 논리적 배열을 결합합니다. 위 출력에서 출력 벡터에 NaN 값이 없고 크기가 같다는 것을 알 수 있습니다.

NaN 값이 동일한 위치의 두 벡터에 모두 존재하는 경우에만 제거하려면 논리 OR 대신 논리 AND를 사용할 수 있습니다. 예를 들어 두 개의 벡터를 만들고 값이 동일한 인덱스에 있는 경우에만 NaN 값을 제거해 보겠습니다.

아래 코드를 참조하십시오.

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) = []

출력:

v1 =

     1     2     2   NaN


v2 =

     1     0     5     6

위의 출력에서 두 벡터의 첫 번째 NaN 값은 동일한 위치에 있고 출력에서 제거됩니다. 두 번째 NaN 값은 해당 값이 NaN이 아니므로 제거되지 않습니다.

작가: 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

관련 문장 - MATLAB Vector