[Python] numpy to list 소수점 값이 다른 현상 해결 본문

Python

[Python] numpy to list 소수점 값이 다른 현상 해결

최재강 2021. 10. 17. 01:20

문제 인식

python 작업중 numpy로 된 값들을 소수점 4자리까지만 자르고 numpy가 아닌 list로 바꾸었을 때 다음과 같이 의도하지 않은 결과값을 얻었다.

빨간 박스 값 중 위의 값이 numpy이고 아래의 값이 일반적인 python list의 값이다. 보이는 것과 같이 list로 변환했더니 소수점 5자리 이상의 값들이 생김을 확인했다.
이 문제는 python list의 float와 numpy의 float type를 python에서 내부적으로 다르게 취급하여 발생하는 문제였다. 따라서 list로 변환했을 때 추가적으로 소수점값이 붙는 것이였다.

해결 방안

numpy의 dtype을 찍어보니 기본적으로 numpy.float32형임을 확인했다. 하지만 python에서는 현재 numpy.float64버전에서만 원본 값그대로 list형으로 변환할 수 있다고 한다. 따라서 round 처리를 하기 전에 numpy.float64로 변환하는 코드를 추가했다.

기존 코드

  # result는 numpy array
  result = np.round(result, 4)
  # tolist로 python list로 변환
  result = result.tolist()

해결한 코드

  # astype을 이용하여 np.float32 -> np.float64 변환
  result = np.round(result.astype(np.float64),4)
  result = result.tolist()

astype으로 numpy.float64 dtype으로 변환하니 numpy의 값 그대로 list로 변환되었다.

참조

Comments