Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中两个数组之间的样条插值_Python_Numpy_Scipy_Interpolation - Fatal编程技术网

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

我试图用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
        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等的附加值?还有一个问题:你能发布你的代码吗?我不知道你是如何组织数组的。你找到解决方案了吗?