【发布时间】:2021-07-28 04:27:32
【问题描述】:
我有一个函数 y = ax + b,其中 a 和 b 是常量。我想找出y的最大值。我们知道如果a = 0那么y = b,否则y的最大值是无穷大。所以我尝试使用 scipy.interpolate.interp1d 来得到答案。运行下面的示例 2 将导致错误消息。
from scipy import interpolate
import math
# example 1 (works): y = x + 0
func1 = interpolate.interp1d([1,2], [1,2], fill_value='extrapolate')
print(func1(math.inf)) # this will print inf as expected
# example 2 (doesn't work): y = 1
func2 = interpolate.interp1d([1,2], [1,1], fill_value='extrapolate')
print(func2(math.inf)) # I'm expecting 1, however it showed array(nan)
错误信息:
RuntimeWarning: invalid value encountered in multiply
y_new = slope*(x_new - x_lo)[:, None] + y_lo
编辑:
用一个非常大的数字替换 math.inf,比如 func2(9223372036854775807) 也可以。
【问题讨论】:
-
问题不在于
interp1d无法处理无限数。你在第一种情况下反驳了这一点,它工作得很好。问题是这条线的斜率为 0。它在 x 中是渐近的。它没有办法选择新的点来推断。我认为这是一个“不要那样做”的案例。 -
请查看我关于 0 斜率的编辑