Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 

If I want to print the numpy.array of floats, it prints several decimals, often in 'scientific' format, which is rather hard to read even for low-dimensional arrays. However, numpy.array apparently has to be printed as a string, i.e., with %s. Is there a solution for this?

like image 753
camillio Avatar asked May 23 '10 12:05

camillio


People also ask

How do I make NumPy not print in scientific notation?

Approach: Import numpy library and create numpy array. Pass the supress value as True to the set_printoptions() method. Print the Array, The entire array will be displayed without scientific notation.

How do I print without scientific notation in Python?

Summary: Use the string literal syntax f"{number:. nf}" to suppress the scientific notation of a number to its floating-point representation.

Does NumPy Use single or double precision?

The bottom line is that numpy uses the default double precision floating point number, which gives you approximately 16 decimal places of precision on most 64 bit systems.


1 Answers

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] 
like image 100
unutbu Avatar answered Sep 22 '22 13:09

unutbu