python中两个数组之间的样条插值
我试图用Python在两个数组之间进行样条插值。我的数据集如下所示:python中两个数组之间的样条插值,python,numpy,scipy,interpolation,Python,Numpy,Scipy,Interpolation,我试图用Python在两个数组之间进行样条插值。我的数据集如下所示: | 5 15 -------+-------------------- 1 32.68 29.16 2 32.73 27.20 3 32.78 28.24 4 32.83 27.27 5 32.88 25.27
| 5 15
-------+--------------------
1 32.68 29.16
2 32.73 27.20
3 32.78 28.24
4 32.83 27.27
5 32.88 25.27
6 32.93 31.35
7 32.98 27.39
8 33.03 26.42
9 33.08 27.46
10 33.13 30.50
11 33.18 27.53
12 33.23 29.57
13 33.23 27.99
14 33.23 28.64
15 33.23 26.68
16 33.23 29.72
from scipy.interpolate import interp2d
f = interp2d(np.arange(1, 17), [5, 15], np.stack((v5, v15)), kind='linear')
我尝试在两点之间做样条插值,得到10的值,最终看起来是这样的(但是样条插值):
我一直在看使用scipy.interpolate.InterpolatedUnivariateSpline
的示例,但似乎只有一个数组用于x
和一个数组用于y
,我不知道如何使它对这两个数组进行插值
有人能帮我指出正确的方向吗?鉴于您拥有的数据量,每个x值只有两个点,分段线性插值是最实用的工具。将两个数组设为v5和v15(沿y=5线和y=15线的值),将x值设为1,2,…,16,我们可以创建如下分段线性插值:
| 5 15
-------+--------------------
1 32.68 29.16
2 32.73 27.20
3 32.78 28.24
4 32.83 27.27
5 32.88 25.27
6 32.93 31.35
7 32.98 27.39
8 33.03 26.42
9 33.08 27.46
10 33.13 30.50
11 33.18 27.53
12 33.23 29.57
13 33.23 27.99
14 33.23 28.64
15 33.23 26.68
16 33.23 29.72
from scipy.interpolate import interp2d
f = interp2d(np.arange(1, 17), [5, 15], np.stack((v5, v15)), kind='linear')
这可以用通常的方法进行计算:例如,f(np.arange(1,17),10)
精确地返回您期望的数字
[ 30.92 , 29.965, 30.51 , 30.05 , 29.075, 32.14 , 30.185,
29.725, 30.27 , 31.815, 30.355, 31.4 , 30.61 , 30.935,
29.955, 31.475]
interp2d
也可以创建三次二元样条曲线,但不能使用此数据:您的网格在y方向上太小。您好,您的操作似乎有两个问题。1.您希望在两个值之间插值,但只有这两个值,因此样条曲线插值没有任何意义。2.您的数据似乎是双变量而不是单变量:一个变量由列表示,一个变量由行表示。因此,也许你需要尝试二元插值。@user1901493从数据应该被视为单变量还是双变量的问题来看,这并不明显。这取决于每个行是否被认为是一个独立的数据序列,要进行插值。好,让我们认为它是独立的。因此,对于每一条线,需要从值5,15插值到值10。是否有0、20、25等的附加值?还有一个问题:你能发布你的代码吗?我不知道你是如何组织数组的。你找到解决方案了吗?