Reputation: 545
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
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
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
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