Scientific Notation in Python and NumPy

Ben Cook • Posted 2021-01-04 • Last updated 2021-10-15

Python can deal with floating point numbers in both scientific and standard notation. This post will explains how it works in Python and NumPy. If you just want to suppress scientific notation in NumPy, jump to this section.

You can create numbers with scientific notation in Python with e:

print(3.45e-4)

# Expected result
# 0.000345

Notice: the number is printed in standard notation even though we defined it with scientific notation. This is because Python decides whether to display numbers in scientific notation based on what number it is. As of Python 3, for numbers less than 1e-4 or greater than 1e16, Python will use scientific notation. Otherwise, it uses standard notation.

But you can override this behavior with string formatting. Use <variable>:<width>.<precision>e in your string formatting to display a number in scientific notation:

x = 3.45e-4
print(f"{x:.2e}")

# Expected result
# 3.45e-04

To suppress scientific notation, use <variable>:<width>.<precision>f:

print(f"{x:.6f}")

# Expected result
# 0.000345

With slight modifications, you can also use the format() or % string formatting approaches:

print("{:.4e}".format(x))

# Expected result
# 3.4500e-04

print("%.7f" % x)

# Expected result
# 0.0003450

NumPy

Finally, in NumPy, you can suppress scientific notation with the np.set_printoptions() function:

import numpy as np

np.set_printoptions(suppress=True)
np.arange(5) / 100000

# Expected result
array([0.     , 0.00001, 0.00002, 0.00003, 0.00004])

You can read more in the docs if you want to change other characteristics of NumPy’s array printing.