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
위의 코드에서 변수 i
는 NaN
값 위치에 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
이 아니므로 제거되지 않습니다.