我遇到了python numpy的奇怪行为;如果我考虑以下代码:
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
x=np.linspace(-1.0, 0.0, 5)
L=1.65
y=x**L
plt.plot(x,y)
plt.show()
向量y=[nan,nan,nan,nan,0.]
,如果代码如下:
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
x=np.linspace(0.0, 1.0, 5)
L=1.65
y=x**L
plt.plot(x,y)
plt.show()
导致y=[0.,0.10153155,0.31864016,0.62208694,1.]
这是正确的。
所以问题是问题是什么?这是一个错误还是我做错了什么?我正在使用Python 2.7.11 | Anaconda 4.0.0。
答案 0 :(得分:3)
你不能将负实数提升为分数幂
在python 2.7
尝试(-1)**1.65
并查看python错误
正如@Blckknght在评论中提到的那样,(-1)**1.65
,python 3
将自动返回一个复数,而不是引发异常
要实现您想要的功能,您需要将数组x
转换为复数
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
x=np.linspace(-1.0, 0.0, 5).astype(np.complex64)
L=1.65
y=x**L
plt.plot(x,y)
plt.show()
检查ValueError: negative number cannot be raised to a fractional power 和How to raise arrays with negative values to fractional power in Python?