numpy set_printoptions的本地范围

时间:2016-06-27 09:43:52

标签: python arrays numpy pretty-print

np.set_printoptions允许自定义numpy数组的漂亮打印。但是,对于不同的用例,我希望有不同的打印选项。

理想情况下,这样做无需每次都重新定义整个选项。我正在考虑使用本地范围,例如:

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

但是,set_printoptions似乎不支持with语句,因为会抛出错误(AttributeError: __exit__)。有没有办法在不创建自己漂亮的印刷类的情况下完成这项工作?这是,我知道我可以创建自己的Context Manager:

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]

然而,是否存在比创建新类更简单(最好已经内置)的东西?

2 个答案:

答案 0 :(得分:3)

尝试

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

或者使用precision等关键字的相关功能之一。看起来它可以控制很多(如果不是全部)打印选项。

答案 1 :(得分:0)

因此基于@unutbu提供的链接,而不是使用

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

我们应该使用:

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

适用于我的情况。如果事情似乎没有改变,请尝试为打印选项操纵其他参数,例如linewidth = 125, edgeitems = 7, threshold = 1000等。