[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 생성하기

     

    'Python > Numpy' 카테고리의 다른 글

    [Numpy] 분포함수(distribution)  (0) 2021.11.20
    [numpy] np.linalg  (0) 2021.11.06
    [Numpy]ndarray 저장, 불러오기  (0) 2021.06.15
    [Numpy]격자 그리드 만들기(meshgrid)  (1) 2021.05.19
    [Numpy] 구조체(structured array)  (0) 2021.05.01

    댓글

    Designed by JB FACTORY

    ....