如何在没有科学符号和给定精度的情况下漂亮地打印numpy.array?

发布于 2021-02-02 23:18:54

我很好奇,是否有任何打印格式化的方法numpy.arrays,例如,类似于以下方式:

x = 1.23456
print '%.3f' % x

如果我想打印numpy.array浮点数,它会以“科学”格式打印几位小数,即使对于低维数组也很难阅读。但是,numpy.array显然必须将其打印为字符串,即使用%s。有解决方案吗?

关注者
0
被浏览
114
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以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. ]
    

    有关其他选项,请参见文档中的set_printoptions

    要使用NumPy 1.15.0或更高版本在本地应用打印选项,可以使用numpy.printoptions上下文管理器。例如,在with-suite precision=3suppress=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]
    

    为防止浮点数结尾处的零被剥离:

    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]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看