I am getting a warning <RuntimeWarning: invalid value encountered in sqrt>
This is not 100% Python related. You can't calculate the square root of a negative number (when dealing with real numbers that is).
You didn't take any precautions for when b**2 - (4*a*c)
is a negative number.
>>> import numpy as np
>>>
>>> np.sqrt(4)
2.0
>>> np.sqrt(-4)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan
Let's test if you have negative values:
>>> import numpy as np
>>>
>>> a = 0.75 + (1.25 - 0.75) * np.random.randn(10000)
>>> b = 8 + (12 - 8) * np.random.randn(10000)
>>> c = -12 + 2 * np.random.randn(10000)
>>>
>>> z = b ** 2 - (4 * a * c)
>>> print len([_ for _ in z if _ < 0])
71
Square roots are not defined for strictly negative real numbers, and numpy will produce nan
for negative inputs of "real" dtype int
, float
, and it's two special values -np.inf
and nan
.
However, square roots are defined for all complex dtype:
dtype | e.g.x |
np.sqrt(x) |
RuntimeWarning |
---|---|---|---|
Positive float | 1. |
1. |
|
Positive int | 1 |
1 |
|
Positive complex | 1+0J |
1 |
|
Negative float | -1. |
nan |
⚠️ |
Negative int | -1 |
nan |
⚠️ |
Negative complex | -1+0j |
1j |
|
Infinity | np.inf |
np.inf |
|
Negative infinity | -np.inf |
nan |
⚠️ |
NaN | np.nan |
nan |