Naive
Naive

Reputation: 545

NumPy, RuntimeWarning: invalid value encountered in power

I am working with Python 3.6.
I am really confused, why this happened ?

In [1]: import numpy as np

In [2]: a = np.array(-1)

In [3]: a
Out[3]: array(-1)

In [4]: a ** (1/3)
/Users/wonderful/anaconda/bin/ipython:1: RuntimeWarning: invalid        value encountered in power
  #!/Users/wonderful/anaconda/bin/python
Out[4]: nan

Upvotes: 27

Views: 70687

Answers (3)

Sam Y
Sam Y

Reputation: 116

Agreed with the solutions above, but I found the reasons while reading Thomas Calculus Chapter 1. What happened, as the book pointed out, is that some software including numpy in this case calculates x ** (1/3) as np.e ** (1 / 3 * np.log(x)), and by the definition of log when x <= 0 the value is undefined, that's why you will see these errors happening and while you further trying to graph the arrays errors of graph incompletion will occur. Hope this explanation helps with understanding the issue.

Upvotes: 0

Back2Basics
Back2Basics

Reputation: 7806

change the dtype to complex numbers

a = np.array(-1, dtype=np.complex128)

The problem arises when you are working with roots of negative numbers.

Upvotes: 12

Kevin
Kevin

Reputation: 836

Numpy does not seem to allow fractional powers of negative numbers, even if the power would not result in a complex number. (I actually had this same problem earlier today, unrelatedly). One workaround is to use

np.sign(a) * (np.abs(a)) ** (1 / 3)

Upvotes: 49

Related Questions