2016-06-27 3 views
2

np.set_printoptions позволяет настроить красивую печать из массивов numpy. Однако для разных вариантов использования я хотел бы иметь разные параметры печати.Локальная область для numpy set_printoptions

В идеале это было бы сделано без необходимости переопределять все параметры каждый раз. Я думал об использовании локальной области видимости, что-то вроде:

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

Однако set_printoptions, кажется, не поддерживает with заявления, так как ошибка генерируется (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' - это код Python для всех этих операций форматирования, включая' set_printoptions'. Вероятно, это было написано до того, как «контексты» были широко использованы в Python. – hpaulj

Смежные вопросы