【问题标题】:Scipy. interpolate griddata cubic spline returning nan instead of values [duplicate]西皮。插值griddata三次样条返回nan而不是值[重复]
【发布时间】:2020-06-10 02:56:37
【问题描述】:

我正在使用 scipy.interpolate griddata 执行三次样条。我测试了一些值,并返回了一些 nans。我在我的代码中给出了一个例子。如何更改代码以生成值而不是 nan?

import pandas as pd
import numpy as np
from scipy.interpolate import griddata

y = [164,166,168,172,173,181,185,189,
             189,191,196,197,198,201,214,218,
             223,224,227,230,231,232,237,253,
             257,257,258,262,266]

z = [0.68,0.95,0.44,0.68,0.93,0.69,0.94,
             1.55,0.94,1.53,1.85,0.52,1.53,1.83,
             0.98,1.53,0.77,1.82,1.56,2.43,1.01,
             1.82,0.15,2.41,1.84,0.39,0.64,1.56,
             2.39]

x = [100,250,400,550,700,850,1000,1150,1300,
             1450,1600,1750,1900,2050,2200,2350,2500,
             2650,2800,2950,3100,3250,3400,3550,3700,
             3850,4000,4150,4300]

xi = np.linspace(100,4300)
yi = np.linspace(164,266)

zi = griddata((x, y), z, (xi, yi), method='cubic')

print(griddata((x,y),z,(3128,265), method='cubic'))



【问题讨论】:

    标签: python pandas numpy scipy


    【解决方案1】:

    这是预期的行为:griddata 仅在给定点的凸包内内插。在您的情况下,输入点(蓝色十字)仅覆盖一小块区域(被黑线包围),而您的点(3128,265)(橙色点)位于此凸包之外:

    所以你的代码没问题,你只需要提供更多的输入数据 (x,y,z) 来覆盖你想要插值的区域。

    【讨论】:

    • 谢谢。我在想这样的事情,但无法在问题中清楚地解释它。除了griddata还有什么更好的使用方法?
    • @cosmicnoise 外推非常危险,因为它通常会创建无意义的数据。仅当您非常清楚插值区域(输入点的凸包)之外的数据应该是什么样子时,才进行推断。您可以在griddata 中使用fill_value 在外部获取恒定的非nan 值,或者使用始终选择最近数据点的'nearest' 插值。否则,通过在数据上拟合 2d 函数(更一般地考虑线性回归)并使用它来查询点可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2016-08-07
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多