scipy.interpolate.interp1d 是否存在引导 x 值的十进制值问题?
Does scipy.interpolate.interp1d have problems with decimal values leading the x values?
我正在尝试使用 scipy 中的 interp1d() 来插入一些数据,但我一直遇到超出或范围错误。经过几个小时的谷歌搜索,我现在知道 x 值不是按升序排列会导致我遇到同样的错误,但我已经确定这不是问题所在。据我所知,看起来 interp1d() 不喜欢第一个值中的小数。我错过了什么吗?
我的问题的简化版本:
以下运行正常。
import numpy as np
from scipy.interpolate import interp1d
interp1d(np.array([1, 2, 3, 4, 5, 6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
但是,这个:
interp1d(np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
Returns:
ValueError: A value in x_new is below the interpolation range.
但是,这很好用。
interp1d(np.array([1.0, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
inter1d
returns 允许您在数据域 内插值 的函数。当你使用
interp1d(np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
数据域为区间[1.1, 6.6]
,x-values
.
的最小值到最大值
由于 1
在 np.linspace(1, 6, num=40)
内,而 1 在 [1.1, 6.6]
外,interp1d
加注
ValueError: A value in x_new is below the interpolation range.
当您尝试在 x-values
np.linspace(1, 6, num=40)
处插入数据时。
当你将数据的x-values
改为
时
np.array([1.0, 2.2, 3.3, 4.4, 5.5, 6.6])
然后数据域扩展到 [1.0, 6.6]
,现在包括 1
。因此,在 np.linspace(1, 6, num=40)
处进行插值现在有效。
我正在尝试使用 scipy 中的 interp1d() 来插入一些数据,但我一直遇到超出或范围错误。经过几个小时的谷歌搜索,我现在知道 x 值不是按升序排列会导致我遇到同样的错误,但我已经确定这不是问题所在。据我所知,看起来 interp1d() 不喜欢第一个值中的小数。我错过了什么吗?
我的问题的简化版本:
以下运行正常。
import numpy as np
from scipy.interpolate import interp1d
interp1d(np.array([1, 2, 3, 4, 5, 6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
但是,这个:
interp1d(np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
Returns:
ValueError: A value in x_new is below the interpolation range.
但是,这很好用。
interp1d(np.array([1.0, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
inter1d
returns 允许您在数据域 内插值 的函数。当你使用
interp1d(np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6]),
np.array([2, 4, 6, 8, 10, 12]), kind='cubic')(np.linspace(1, 6, num=40))
数据域为区间[1.1, 6.6]
,x-values
.
由于 1
在 np.linspace(1, 6, num=40)
内,而 1 在 [1.1, 6.6]
外,interp1d
加注
ValueError: A value in x_new is below the interpolation range.
当您尝试在 x-values
np.linspace(1, 6, num=40)
处插入数据时。
当你将数据的x-values
改为
np.array([1.0, 2.2, 3.3, 4.4, 5.5, 6.6])
然后数据域扩展到 [1.0, 6.6]
,现在包括 1
。因此,在 np.linspace(1, 6, num=40)
处进行插值现在有效。