我有以下numpy的陣列和功能:使用numpy的陣列評估函數返回INF和楠
:
import numpy
import scipy.special
i = numpy.linspace(0, 500, 501, dtype = int)
def func(x, n):
return scipy.special.eval_hermite(n, x)
我使用兩種不同的appraoches評價我numpy的陣列i
每個元素的功能方法1:
hermites = func(0, i)
方法2:
hermites = [func(0, idx) for idx in i]
這兩種方法導致兩種不同的答案。他們是不同的,因爲元素50
,方法1開始返回inf
和nan
。 方法2也不給每個元素i
正確的值。但是,它可以計算出更多。方法2對於i >= 64
失敗。
兩種方法大致在同一時間給出答案(len(i) = 15000
爲0.7秒,使用timeit
確定)。我不明白的是不同的結果。這是因爲我學會盡可能避免使用Python中的for loops
。這次似乎並非如此。
它與記憶有關的想法也跨越了我的想法。然而,評估一個單一元素,即print func(0, 64)
也返回0.
(等於輸出方法2)。
這是怎麼回事?
我們應該編輯標題嗎?問題的有趣部分不是關於「爲什麼inf和nan」,而是「爲什麼不傳遞數組並使用listcomp來遍歷元素返回相同的結果?」 – DSM
升級到scipy 0.16.0後獲得更好的結果。然而,現在對於'i> = 270'我再次獲得'inf'或'nan'。這個bug已經完全(所有可能的'我')修復在scipy開發版本?有沒有辦法獲得這個版本? –
對於'i> = 270','x = 0'處的Hermite多項式的值大於可以用64位浮點值表示的值,所以'inf'是可以預期的。對於'i> = 300',我得到'nan';我沒有看過它,但我懷疑有些代碼最終會做'inf - inf'。 –