【问题标题】:Is there a way to interpolate from a table with data in scipy?有没有办法从表中插入 scipy 中的数据?
【发布时间】:2016-05-06 22:43:11
【问题描述】:
我的问题如下。对于给定的 x,我有一个代码计算函数 f(x) 的值。然而,由于 f(x) 有点太大和复杂,并且程序必须在不同的时间步长通过一个非常大的数据集 (x),所以效率并不高。我想知道 scipy 中是否有一个函数,这样我就可以创建一个具有不同已计算的 f(x) 值的表,例如在文件“function.txt”中保存一个表(当然在我的情况下)该表将从值 1e0、1e8 开始变大):
x f(x)
1 1
2 4
3 9
4 16
5 25
然后以某种方式使用插值,这样如果我的程序读取 x = 2.2,它可以从表中已经计算的值估计值 f(x)。
【问题讨论】:
标签:
python
scipy
interpolation
【解决方案1】:
你在 numpy 中有 polyfit 和 polyval :
import numpy as np
x=np.arange(1,6)
y=np.array((1,4,9,16,25))
coeffs=np.polyfit(x,y,deg=5) # eval your polynomial coefficients
x2=np.linspace(np.min(x),np.max(x),1000)
y2=np.polyval(coeffs,x2) # apply your polynomial coeff to a broader set of data
【解决方案2】:
我实际上可以使用 interp1d 以非常简单的方式做我想做的事。以我之前使用的数字为例。
import numpy
from scipy.interpolate import interp1d
x = numpy.linspace(1, 100, 1000)
y = x**2
f = interp1d(x, y)
xnew = 2.2
ynew = f(x)
print f(x)
输出:4.84095446798