[Numpy] 소수점 반올림하기(np.set_printoptions)

반응형
반응형

수치계산을 하다보면 반올림을 하거나 소수점 제한을 줘서 출력해야 하는데 numpy에서 그런 역할을 하는 메쏘드가 있습니다. np.set_printoptions라는 것인데요.

정밀화 과정을 하거나 표현을 쉽게 하기 위해서 값의 설정을 변경할 수 있습니다.

쥬피터로 작업을 하면 한번만 설정해놓으면 밑의 작업들 전체가 설정에 따르게 됩니다.

np.set_printoptions의 많은 파라미터가 있지만 주요로 쓰는 파라미터만 포스팅하고

나머지는 가이드 사이트에서 확인하시기 바랍니다.

제가 쓸 파마리터는 precision, threshold, formatter 입니다.

 

소수점 반올림하기(precision)

소수점 반올림합시다. 이게 한번 설정하면 처음처럼 자연스레 돌릴수가 없어서 먼저 처음으로 돌아갈 곳을 알고 있어야 합니다. default = 8 입니다.

비슷한 작업하면 걸어놓고 하기 때문에 바꾸지 않을 수도 있는데 그래도 알고 있는것이 좋은듯합니다.

 

일단 설정을 안 하고 8자리 숫자를 봐보겠습니다.

import numpy as np
np.array([1.23456789])

 

아무변화가 없죠. default=8 이니 반올림이 일어나지 않습니다.

9자리로 바꿔봅시다. 뒤를 89로 바꿨습니다.

 

np.array([1.234567879])

 

이런식으로 알게 모르게 반올림이 되고 있었습니다. 

이제 precision을 사용해 제가 원하는만큼 반올림을 해보겠습니다.

5자리로 마무리짓도록 설정을 하겠습니다. 그러니까 소수 다섯째 자리까지 반올림입니다. 

 

np.set_printoptions(precision=5)
np.array([1.23456789])

 

5자리로 마무리가 되었고 반올림도 일어났습니다. 

np.set_printoptions은 한번 실행을 시키면 바꿀때까지 설정이 유지됩니다. 

다시 초기화하려면 np.set_printoptions(precision=8)을 넣어서 실행시키면 됩니다.

np.set_printoptions(precision=8)
np.array([1.23456789])

 

array 전체 출력(threshold)

array를 길게 만들어 출력할 때 보통 다 나오는데 길어지면 중간이 ... 형식으로 나오게 됩니다. 

이것도 컨트롤할 수 있습니다. default = 1000 입니다. 즉, 1000개보다 많으면 줄여서 나옵니다. 

 

np.arange(100)

 

위에 출력한대로 100정도는 다 나옵니다. default가 1000이니까요.

이걸 다 나오게 하지 않으려면 100보다 작은 숫자를 threshold에 설정해주면 됩니다.

 

np.set_printoptions(threshold=99)
np.arange(100)

 

99개까지만 전체를 볼것이고 숫자가 넘어가면 중간은 ...으로 대체되어 출력이 되었습니다.

나는 무조건 다 보겠다 한다면 np.inf를 넣어 설정해놓으면 됩니다. 

출력이 너무 많아 메모리 터지면 안 될수도 있습니다. 각자의 판단에 맡기겠습니다.

np.set_printoptions(threshold=np.inf)
np.arange(1500)

 

1500개를 했으니 1500개 숫자가 다 나오게 됩니다. 더 큰 숫자도 위처럼 나옵니다.

 

 

 

출력 형식 만들기(formatter)

형식을 만들 수 있습니다. 타입을 바꾸는건 아니고 출력형식을 바꾸는 방법입니다.

다음은 설정값입니다. 

  • 'bool’
  • ‘int’
  • ‘timedelta’ 
  • ‘datetime’ 
  • ‘float’
  • ‘longfloat’ : 128-bit floats
  • ‘complexfloat’
  • ‘longcomplexfloat’ : composed of two 128-bit floats
  • ‘numpystr’ : types numpy.string_ and numpy.unicode_
  • ‘object’ : np.object_ arrays
  • ‘all’ : sets all types
  • ‘int_kind’ : sets ‘int’
  • ‘float_kind’ : sets ‘float’ and ‘longfloat’
  • ‘complex_kind’ : sets ‘complexfloat’ and ‘longcomplexfloat’
  • ‘str_kind’ : sets ‘numpystr’

 

np.set_printoptions(formatter={설정값:lambda x : 출력형식}) 으로 하시면 됩니다.

예를 들어 float만 바꾸겠다 하면 설정값 자리에 'float'을 넣는 방식입니다.

 

예로, 반올림을 하지말고 소수점 3째짜리만 나오게 설정을 해봅시다.

np.set_printoptions(formatter={'float_kind': lambda x: "{0:0.3f}".format(x)})
np.array([1.23456789])

반올림없이 나오게 됩니다.

 

 

앞에 글자를 붙여볼 수도 있습니다.

np.set_printoptions(formatter={'int':lambda x: 'int: '+ str(x)})
np.arange(10)

 

int말고 float으로 바꿔서 위와 똑같이 하면 아무일도 안 일어납니다.

np.set_printoptions(formatter={'float':lambda x: 'int: '+ str(x)})
np.arange(10)

 

formatter는 default가 없으니 다시 원상태로 돌리고 싶다면 다음과 같이 합니다.

np.set_printoptions()

 

즉, 출력형식을 아무것도 설정하지 않으면 됩니다.

어떻게 쓰는지 감이 좀 오셨으면 좋겠습니다.

아무튼 여기까지 포스팅을 마치고요. 더 자세한 내용은 가이드 사이트에서 보시기 바랍니다.

 

 

관련 포스팅

가이드 사이트

[Python/Numpy] - ndarray 생성하기

 

데이터목장님의
글이 좋았다면 응원을 보내주세요!

Designed by JB FACTORY