interpolate/extrapolate 给定步数的两个 x 值之间 python
interpolate/extrapolate between two x-values for a given number of steps python
我想创建一个新的 df,给定起始值 x0 和结束值 x1,输出 interpolates/extrapolates 给定的 n 个点。
例如,给定下面的 df,我想在 x0=57000 和 x1=62000 之间创建一个新的 df,步长为 250,即 n=21 点:
x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
df = pd.DataFrame(data=[x,y]).transpose()
df.columns=['x','y']
给定 df1,我想创建一个新的 df2,这样输出将是:
>>>print(df2)
x y
0 57000 2.78745
1 57250 2.74425
2 57500 2.70106
3 57750 2.72185
4 58000 2.93666
5 58250 2.34479
6 58500 1.67233
7 58750 2.13959
8 59000 2.31422
9 59250 2.47805
10 59500 2.58523
11 59750 2.69242
12 60000 2.97746
13 60250 3.28227
14 60500 3.18627
15 60750 3.04574
16 61000 3.04658
17 61250 3.25947
18 61500 3.62019
19 61750 4.10685
20 62000 4.59351
对于 Python 中的插值,您可以使用 scipy.interpolate.InterpolatedUnivariateSpline
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
interpolation_function = InterpolatedUnivariateSpline(x,y)
new_x = np.arange(57000,62001,250)
new_y = interpolation_function(new_x)
输出将是 numpy 数组,然后可以将其放入 pandas 数据帧。
这肯定不会得到您在答案中指定的值,因为原始 y
值都在 [2, 6] 范围内,因此人们希望输出也为正如@Prune 所指出的,在这个范围内(对于插值)。
InterpolatedUnivariateSpline 默认允许外推(参见 ext
参数)。如果您想要线性插值而不是三次插值(k=3
,默认值),您可以指定 k=1
作为参数。
Pandas 也有自己的插值方法 interpolate
如果您的起点是 Dataframe
,您可以使用它
我想创建一个新的 df,给定起始值 x0 和结束值 x1,输出 interpolates/extrapolates 给定的 n 个点。
例如,给定下面的 df,我想在 x0=57000 和 x1=62000 之间创建一个新的 df,步长为 250,即 n=21 点:
x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
df = pd.DataFrame(data=[x,y]).transpose()
df.columns=['x','y']
给定 df1,我想创建一个新的 df2,这样输出将是:
>>>print(df2)
x y
0 57000 2.78745
1 57250 2.74425
2 57500 2.70106
3 57750 2.72185
4 58000 2.93666
5 58250 2.34479
6 58500 1.67233
7 58750 2.13959
8 59000 2.31422
9 59250 2.47805
10 59500 2.58523
11 59750 2.69242
12 60000 2.97746
13 60250 3.28227
14 60500 3.18627
15 60750 3.04574
16 61000 3.04658
17 61250 3.25947
18 61500 3.62019
19 61750 4.10685
20 62000 4.59351
对于 Python 中的插值,您可以使用 scipy.interpolate.InterpolatedUnivariateSpline
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
x = [57136,57688,58046,58480,58730,59210,59775,60275,60900,61365,62030]
y = [3.87, 3.55, 3.75, 2.04, 2.66, 3.1, 3.38, 4.13, 3.7, 4, 5.78]
interpolation_function = InterpolatedUnivariateSpline(x,y)
new_x = np.arange(57000,62001,250)
new_y = interpolation_function(new_x)
输出将是 numpy 数组,然后可以将其放入 pandas 数据帧。
这肯定不会得到您在答案中指定的值,因为原始 y
值都在 [2, 6] 范围内,因此人们希望输出也为正如@Prune 所指出的,在这个范围内(对于插值)。
InterpolatedUnivariateSpline 默认允许外推(参见 ext
参数)。如果您想要线性插值而不是三次插值(k=3
,默认值),您可以指定 k=1
作为参数。
Pandas 也有自己的插值方法 interpolate
如果您的起点是 Dataframe