반응형

핵심 정리

NumPy reshape는 배열의 데이터 값은 유지한 채 shape를 바꾸는 연산이고, np.isnan은 배열 원소마다 NaN 여부를 불리언 값으로 돌려주는 검사 함수입니다. 이 글의 그림은 같은 여섯 값을 2행 3열, 3행 2열, 1차원 배열, 열 벡터로 바꾸는 차이를 보여 줍니다.

  • reshape를 사용할 때에는 원소 총개수가 호환되어야 합니다. 예제의 여섯 원소는 (2, 3), (3, 2), (6,), (6, 1) 모양으로 바꿀 수 있습니다.
  • (6,)은 1차원 배열이고 (6, 1)은 행 여섯 개와 열 하나를 가진 2차원 배열이므로, 이후 연산이 기대하는 차원을 확인해야 합니다.
  • reshape(-1, 1)처럼 한 축에 -1을 지정하면 NumPy가 전체 원소 수와 나머지 축을 바탕으로 그 축의 크기를 계산합니다.
  • NaN 포함 여부를 확인할 때 np.nan in 배열 같은 멤버십 비교에 기대기보다 np.isnan(배열)로 원소별 마스크를 만들고, 필요하면 any 연산으로 하나라도 있는지 확인하는 흐름이 명확합니다.
  • 원문의 np.isnan(np.min(X)) 예제는 NaN이 섞인 집계 결과를 확인하는 메모이며, 개별 위치를 찾으려면 배열 자체에 np.isnan을 적용하는 편이 알맞습니다.

먼저 아래 이미지에서 reshape 전후 shape가 어떻게 달라지는지 확인하고, 이어지는 코드에서 NaN 비교가 일반 값 비교와 다르게 다뤄져야 하는 이유를 읽으면 됩니다.

이어서 볼 글

 

reshape

이 함수는 다음처럼 차원을 바꿀 때 사용함

2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태
2행 3열 NumPy 배열과 shape가 (2, 3)인 초기 상태

원래는 2행 3열인 2차원 array 자료를

reshape로 같은 값을 3행 2열 배열로 바꾼 결과
reshape로 같은 값을 3행 2열 배열로 바꾼 결과

reshape으로 위처럼 3행 2열로 변경할 수 있다.

reshape(6)으로 배열을 1차원 형태로 바꾼 결과
reshape(6)으로 배열을 1차원 형태로 바꾼 결과

위 처럼 2차원을 1차원으로 줄일 수도 있고,

reshape(6, 1)로 열 벡터 형태를 만든 결과
reshape(6, 1)로 열 벡터 형태를 만든 결과

1차원같은 2차원으로 만들수도 있다(이런 형태가 Keras 쓰다보면 필요함)

더욱 좋은 사용법은 -1을 이용해서 일부값을 스킵하면 알아서 채워준다는 것

reshape(-1, 1)에서 행 크기를 자동 추론한 결과
reshape(-1, 1)에서 행 크기를 자동 추론한 결과

nan 체크

놀랍게도 아래 방법으로는 체크가 되지 않는 경우가 있음을 발견


>>> X[date][isin]
array([ nan,  nan,  nan,  nan,  nan,  nan])
>>> np.nan in X[date][isin]
False

여기에도 해당 내용이 있다.


>>> np.isnan(np.min(X))
True

위 처럼 하라는거네

반응형

+ Recent posts