Infinity and Not-A-Number (nan)

5.6. Infinity and Not-A-Number (nan)#

Some arithmetic operations such as division by zero lead to infinity of undertermined numbers, which normally result in an error:

1 / 0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[2], line 1
----> 1 1 / 0

ZeroDivisionError: division by zero

Since operations on arrays perform many arithmetical operations at once, it would be inconvenient to get an error each time only a few calculations failed. For this matter, instead of generating errors, NumPy only warns and provides special constants to express infinity (np.inf) and undetermined numbers (np.nan, not-a-number):

import numpy as np

a = np.array([0.0, 1.0, -1.0, 1.0])
b = np.array([0.0, 0.0, 0.0, 1.0])

c = a / b

c
/var/folders/7v/g5_ntzfx35v4ck07wflynw640000gp/T/ipykernel_64460/2090094188.py:6: RuntimeWarning: divide by zero encountered in divide
  c = a / b
/var/folders/7v/g5_ntzfx35v4ck07wflynw640000gp/T/ipykernel_64460/2090094188.py:6: RuntimeWarning: invalid value encountered in divide
  c = a / b
array([ nan,  inf, -inf,   1.])

To know which operations resulted in nan or inf, we use np.isnan and np.isinf:

np.isnan(c)
array([ True, False, False, False])
np.isinf(c)
array([False,  True,  True, False])

Good practice: Missing data

It is common in data analysis to use np.nan for representing missing data. For instance, we could record the (x, y, z) trajectory of a reflective marker and use (nan, nan, nan) when the marker is not seen by the cameras.