2016-06-27 3 views
2

np.set_printoptions은 numpy 배열의 예쁜 인쇄을 사용자 정의 할 수 있습니다. 그러나 다른 유스 케이스의 경우 다른 인쇄 옵션을 갖고 싶습니다.numpy에 대한 로컬 범위 set_printoptions

이상적으로 이것은 매번 옵션 전체를 재정의 할 필요없이 수행됩니다. 나는 같은 지역의 범위, 뭔가를 사용하는 방법에 대한 생각 :

with np.set_printoptions(precision=3): 
    print my_numpy_array 

그러나, set_printoptionswith 문을 지원하지 않는 것, 에러가 (AttributeError: __exit__) 슬로우됩니다있다. 자신의 예쁜 인쇄 수업을 만들지 않고도이 작업을 할 수있는 방법이 있습니까?

class PrettyPrint(): 
    def __init__(self, **options): 
     self.options = options 

    def __enter__(self): 
     self.back = np.get_printoptions() 
     np.set_printoptions(**self.options) 

    def __exit__(self, *args): 
     np.set_printoptions(**self.back) 

그리고로 사용 :이 내가 아니라 내 자신의 상황에 맞는 관리자를 만들 수 있다는 것을 알고있다, 그러나, 거기에

>>> print A 
[ 0.29276529 -0.01866612 0.89768998] 

>>> with PrettyPrint(precision=3): 
     print A 
[ 0.293 -0.019 0.898] 

(바람직하게는 이미 내장)보다 더 간단 뭔가 새로운 수업을 만드는거야?

+1

[그림] (http://stackoverflow.com/a/2891805/190597)의 컨텍스트 관리자를 만드는보다 간단한 방법이 있습니다. – unutbu

+0

@unutbu'contextlib' (그 답변도)에 대해 몰랐어요. 고마워요! 그러나 그것은 여전히 ​​새로운 함수를 정의하는 것을 의미합니다. 나는 아무것도 아닌 것보다 낫다고 생각합니다. –

답변

2

np.array_repr(x, precision=6, suppress_small=True) 

또는 precision 같은 키워드를 가지고 관련 기능 중 하나 봅니다. 모든 인쇄 옵션을 제어 할 수있는 것처럼 보입니다.

+0

감사합니다. 컨텍스트 관리자와 정확하게 동일하지는 않지만 내 용도에 대해 훨씬 더 읽기 쉽고 짧습니다. –

+1

'np.core.arrayprint.py'는'set_printoptions'을 포함하여이 모든 포맷 작업을위한 파이썬 코드입니다. 'contexts'가 파이썬에서 널리 사용되기 전에 작성된 것 같습니다. – hpaulj