반응형
질문
나는 이와 유사한 방식으로 NumPy 배열을 서식화하여 인쇄하는 방법을 알고 싶습니다:
x = 1.23456
print('%.3f' % x)
만약 나는 부동 소수점의 numpy.ndarray
를 인쇄하고 싶다면, 여러 소수점이 인쇄되는데, 종종 '과학적' 형식으로 인쇄되어 낮은 차원의 배열에도 읽기 어렵습니다. 그러나 numpy.ndarray
는 문자열로 인쇄되어야 한다고 하는 것 같습니다, 즉, %s
와 함께입니다. 이에 대한 해결책이 있을까요?
답변
numpy.set_printoptions
를 사용하여 출력의 정밀도를 설정합니다:
import numpy as np
x = np.random.random(10)
print(x)
# [ 0.07837821 0.48002108 0.41274116 0.82993414 0.77610352 0.1023732
# 0.51303098 0.4617183 0.33487207 0.71162095]
np.set_printoptions(precision=3)
print(x)
# [ 0.078 0.48 0.413 0.83 0.776 0.102 0.513 0.462 0.335 0.712]
또한 suppress
는 작은 수에 대한 과학적 표기법 사용을 억제합니다:
y = np.array([1.5e-10, 1.5, 1500])
print(y)
# [ 1.500e-10 1.500e+00 1.500e+03]
np.set_printoptions(suppress=True)
print(y)
# [ 0. 1.5 1500. ]
로컬로 출력 옵션을 적용하려면, NumPy 1.15.0 이상을 사용하여 numpy.printoptions
컨텍스트 매니저를 사용할 수 있습니다.
예를 들어, with-suite
내부에서 precision=3
과 suppress=True
가 설정됩니다:
x = np.random.random(10)
with np.printoptions(precision=3, suppress=True):
print(x)
# [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]
하지만 with-suite
외부에서는 출력 옵션이 기본 설정으로 돌아갑니다:
print(x)
# [ 0.07334334 0.46132615 0.68935231 0.75379645 0.62424021 0.90115836
# 0.04879837 0.58207504 0.55694118 0.34768638]
NumPy의 이전 버전을 사용하는 경우, 컨텍스트 매니저를 직접 생성할 수 있습니다. 예를 들어,
import numpy as np
import contextlib
@contextlib.contextmanager
def printoptions(*args, **kwargs):
original = np.get_printoptions()
np.set_printoptions(*args, **kwargs)
try:
yield
finally:
np.set_printoptions(**original)
x = np.random.random(10)
with printoptions(precision=3, suppress=True):
print(x)
# [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]
소수점 이하의 0이 제거되지 않도록 하려면:
np.set_printoptions
에는 이제 각 유형에 대한 형식 함수를 지정할 수 있는 formatter
매개변수가 있습니다.
np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
print(x)
다음을 출력합니다:
[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
대신 다음을 출력합니다:
[ 0.078 0.48 0.413 0.83 0.776 0.102 0.513 0.462 0.335 0.712]
반응형
댓글