numpy x ** L运算符给出NaN,如果x是负浮点数的向量

时间:2016-05-31 14:37:56

标签: python numpy

我遇到了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。

1 个答案:

答案 0 :(得分:3)

你不能将负实数提升为分数幂

python 2.7尝试(-1)**1.65并查看python错误

正如@Blckknght在评论中提到的那样,(-1)**1.65python 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 powerHow to raise arrays with negative values to fractional power in Python?