2016-05-31 11 views
2

我遇到了python numpy的奇怪行爲;如果我考慮下面的代碼:numpy x ** L操作符給出NaN,如果x是負浮點數的向量

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。

回答

3

不能提高負實數到分數冪

python 2.7嘗試做(-1)**1.65,看到蟒蛇錯誤

由於@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?

+3

值得一提的是Python 3中,當你這樣做會自動返回一個'complex'值'(-1)** 1.65',而不是拋出異常。雖然這是新的行爲,'numpy'仍然表現相同的方式。 – Blckknght

+0

謝謝,我很確定我確實做錯了什麼!當然,我必須使用複數,再次感謝... – LucaG

相關問題