>>> from scipy.special import erf
>>> print (erf(0.j))
__main__:1: RuntimeWarning: invalid value encountered in erf
0j
這個警告只打印一次(即使我做scipy.special.errprint(0)
)運行時警告,但我不明白爲什麼它打印在所有。真的,0.j
和0.
的數字是一樣的,它沒有問題。scipy.special.erf提高與0.j
我想有兩個問題: 1)有沒有什麼辦法來壓制這個警告? 2)這是警告一個錯誤,還是我錯過了什麼?
UPDATE
我(我認爲)在SciPy的源代碼樹追查誤差函數。它位於:scipy/special/specfun/specfun.f
(subroutine CERROR
)。此函數不會引發警告(從簡單的Fortran程序中調用時可以正常工作)。
據我所知,他們是不同的數字就python而言。但數學上,它們並沒有不同。我的觀點是,如果0.不是無效數字,0.j也不應該是。但是,感謝關閉警告的方式。 – mgilson 2012-07-12 14:06:11
@mgilson:問題不在於0j對erf無效。無論何時在計算過程中遇到無效的浮點操作時都會引發無效警告,例如, 0/0。 – kennytm 2012-07-12 14:13:48
@mgilson:有關警告的原因,請參閱更新。 – kennytm 2012-07-12 14:23:35