Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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_Scipy_Interpolation - Fatal编程技术网

Python 为什么即使值是单调递增的,我也不能插值?

Python 为什么即使值是单调递增的,我也不能插值?,python,scipy,interpolation,Python,Scipy,Interpolation,我有两个数组,我以这种方式绘制: plt.plot(x1, x2) 我想知道x2在x1=2,5,75,10100和1000时的值是多少。由于可能不存在所有值,我使用以下方法进行插值: from scipy.interpolate import interp1d f1=interp1d(x1, x2) f2=interp1d(x1, x2, kind='cubic') 但是f2抛出此错误: ValueError:x应该是一维排序数组。\u类似于。 但这些值是单调递增的,正如预期的: 我做错了

我有两个数组,我以这种方式绘制:

plt.plot(x1, x2)

我想知道
x2
x1=2,5,75,10100和1000时的值是多少。由于可能不存在所有值,我使用以下方法进行插值:

from scipy.interpolate import interp1d
f1=interp1d(x1, x2)
f2=interp1d(x1, x2, kind='cubic')
但是
f2
抛出此错误:

ValueError:x应该是一维排序数组。\u类似于。

但这些值是单调递增的,正如预期的:

我做错了什么

x1

array([1.00020004e+00, 1.00020004e+00, 1.00080064e+00, 1.00200401e+00,
       1.00341160e+00, 1.00603622e+00, 1.01173614e+00, 1.02165917e+00,
       1.02965404e+00, 1.04362346e+00, 1.05820106e+00, 1.07688994e+00,
       1.10107906e+00, 1.12688754e+00, 1.16063138e+00, 1.19161106e+00,
       1.23578843e+00, 1.29198966e+00, 1.35062129e+00, 1.42775557e+00,
       1.52207002e+00, 1.63345312e+00, 1.77746178e+00, 1.93124759e+00,
       2.11954218e+00, 2.37191651e+00, 2.68528464e+00, 2.97973778e+00,
       3.38983051e+00, 3.89105058e+00, 4.48430493e+00, 5.31349628e+00,
       6.28930818e+00, 7.59878419e+00, 9.38086304e+00, 1.20192308e+01,
       1.57232704e+01, 2.06611570e+01, 2.68817204e+01, 3.49650350e+01,
       4.58715596e+01, 6.57894737e+01, 8.92857143e+01, 1.38888889e+02,
       2.27272727e+02, 4.16666667e+02, 1.00000000e+03, 2.50000000e+03,
       2.50000000e+03, 5.00000000e+03])
x2

array([ 11.18083778,  12.00065196,  12.88057749,  13.82502193,
        14.838716  ,  15.92673731,  17.09453577,  18.34796088,
        19.69329106,  21.13726508,  22.68711581,  24.35060647,
        26.1360695 ,  28.05244828,  30.10934199,  32.31705361,
        34.68664159,  37.22997521,  39.95979405,  42.88977178,
        46.0345847 ,  49.40998519,  53.03288065,  56.9214182 ,
        61.09507555,  65.57475857,  70.38290604,  75.54360201,
        81.08269642,  87.02793465,  93.40909644, 100.25814508,
       107.6093875 , 115.49964612, 123.96844331, 133.05819935,
       142.81444487, 153.28604899, 164.52546404, 176.58898835,
       189.53704818, 203.43450047, 218.35095766, 234.36113639,
       251.54523176, 269.98931903, 289.78578477, 311.03378962,
       333.83976499, 358.31794618])

它正在做的测试是:

np.any(x1[1:] <= x1[:-1])

它正在做的测试是:

np.any(x1[1:] <= x1[:-1])

在进行插值之前,只需添加这两行:

x1[0] -= 0.0000001
x1[-2] += 0.0000001 

看起来with epsilon不起作用

只需在执行插值之前添加这两行:

x1[0] -= 0.0000001
x1[-2] += 0.0000001 


看起来epsilon不起作用

有没有可能因为x1中的值相等(例如前两个值),所以样条立方不起作用?从文档中可以看出,它应该是有意义的,因为它们的插值方式我们可以看到
x1
的前两个值的数字是相同的。如果这两个值实际上是相同的,那么
x1
就不是严格单调递增的。@WarrenWeckesser同意。我没有注意到他们。并且没有区分
单调递增
严格单调递增
。我的数据是否有其他方法?因此,您确实使用不同的
x2
值重复了
x1
值?您希望插值器如何处理这些数据?也就是说,插值器在
x1
的其中一个重复值处应该返回什么?是否可能是因为在x1中有相等的值(例如前两个值),样条立方不工作?从文档中可以看出,它应该是有意义的,因为它们的插值方式我们可以看到
x1
的前两个值的数字是相同的。如果这两个值实际上是相同的,那么
x1
就不是严格单调递增的。@WarrenWeckesser同意。我没有注意到他们。并且没有区分
单调递增
严格单调递增
。我的数据是否有其他方法?因此,您确实使用不同的
x2
值重复了
x1
值?您希望插值器如何处理这些数据?也就是说,插值器在重复的
x1
值之一时应该返回什么?非常感谢!不幸的是,我无法更改这些值本身,因为它们是我计算的一部分。对于非线性数据,是否有一种替代插值技术不受此限制。您可以将ε添加/减去重复值,这不会影响结果,但不再影响结果equal@SembeiNorimaki请你解释一下,好吗?我不知道怎么做。不清楚当你有相同的x1对应不同的x2时会发生什么。你可以在maximusdooku删除它们——不确定这是否合适。再见,非常感谢!不幸的是,我无法更改这些值本身,因为它们是我计算的一部分。对于非线性数据,是否有一种替代插值技术不受此限制。您可以将ε添加/减去重复值,这不会影响结果,但不再影响结果equal@SembeiNorimaki请你解释一下,好吗?我不知道怎么做。不清楚当你有相同的x1对应不同的x2时会发生什么。你可以在maximusdooku删除它们——不确定这是否合适。请参阅edit此解决方案不会对我进行扩展,因为我将在数千个阵列上执行此操作。我不知道会提前重复哪些索引。然后你需要迭代这些值,当你看到重复的值时,这个解决方案对我来说不会扩展,因为我将在数千个数组上进行。我不知道哪些索引会提前被重复,然后你需要对这些值进行迭代,当你看到重复的值时,应用这个