2016-06-27 4 views
2

np.set_printoptionsは、numpy配列のかなりのプリントをカスタマイズできます。しかし、異なるユースケースについては、異なる印刷オプションが必要です。numpyのローカルスコープset_printoptions

理想的には、毎回オプション全体を再定義する必要はありません。私は、ローカルスコープを使用して上のようなものを考えていた:

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

を、エラーがスローされるようしかし、set_printoptionsは(AttributeError: __exit__)、with文をサポートしていないようです。あなた自身のかなりの印刷クラスを作成せずにこの仕事をする方法はありますか?

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'を含むこれらのフォーマット操作のためのPythonコードです。 'contexts'がPythonで広く使われる前に書かれたのかもしれません。 – hpaulj

関連する問題