How to pretty-print a numpy.array without scientific notation and with given precision?

后端 未结 14 2199
臣服心动
臣服心动 2020-11-22 04:28

I\'m curious, whether there is any way to print formatted numpy.arrays, e.g., in a way similar to this:

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


        
14条回答
  •  太阳男子
    2020-11-22 04:40

    You can use set_printoptions to set the precision of the output:

    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]
    

    And suppress suppresses the use of scientific notation for small numbers:

    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. ]
    

    See the docs for set_printoptions for other options.


    To apply print options locally, using NumPy 1.15.0 or later, you could use the numpy.printoptions context manager. For example, inside the with-suite precision=3 and suppress=True are set:

    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]
    

    But outside the with-suite the print options are back to default settings:

    print(x)    
    # [ 0.07334334  0.46132615  0.68935231  0.75379645  0.62424021  0.90115836
    #   0.04879837  0.58207504  0.55694118  0.34768638]
    

    If you are using an earlier version of NumPy, you can create the context manager yourself. For example,

    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]
    

    To prevent zeros from being stripped from the end of floats:

    np.set_printoptions now has a formatter parameter which allows you to specify a format function for each type.

    np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
    print(x)
    

    which prints

    [ 0.078  0.480  0.413  0.830  0.776  0.102  0.513  0.462  0.335  0.712]
    

    instead of

    [ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]
    

提交回复
热议问题