我有以下的numpy数组和函数:
import numpy
import scipy.special
i = numpy.linspace(0, 500, 501, dtype = int)
def func(x, n):
return scipy.special.eval_hermite(n, x)
我使用两种不同的方法来评估我的numpy数组i中的每个元素的函数:
方法1:
hermites = func(0, i)
方法二:
hermites = [func(0, idx) for idx in i]
这两种方法得到了两个不同的答案。它们之间的区别在于,在元素
50
之后,方法1 开始返回 inf
和 nan
。虽然方法2 也不能为每个元素 i
给出正确的值,但它可以计算更多的元素。但是,当 i >= 64
时,方法2失败了。这两种方法用大约相同的时间给出了答案(对于
len(i) = 15000
,使用 timeit
确定为 0.7s)。我不明白的是它们得到了不同的结果。这是因为我学习时尽可能避免在 Python 中使用 for 循环
。但这次似乎不是这样。我也考虑过与内存有关的问题。但是,评估单个元素,即
print func(0, 64)
,也会返回 0.
(与方法2 的输出相同)。发生了什么事?
i >= 270
,我又获得了inf
或nan
。这个错误在scipy开发版本中是否已经完全修复(所有可能的i
)?有没有办法获取这个版本? - The Dudei >= 270
,在x=0
处的 Hermite 多项式值大于可以用 64 位浮点数表示的值,因此应该期望得到inf
。对于i >= 300
,我得到了nan
;我还没有深入研究,但我怀疑某些代码最终会执行inf - inf
。 - Warren Weckesser