Python Scipy LSQSphereBivariateSpline:悬挂,以及如何选择结?

Python Scipy LSQSphereBivariateSpline:悬挂,以及如何选择结?,python,scipy,interpolation,spline,least-squares,Python,Scipy,Interpolation,Spline,Least Squares,我正在编写一些python代码,将不规则数据插值到180°lat x 360°lon球面网格上。当我调用以下命令时,代码当前处于挂起状态: def geo_interp(lats,lons,data,grid_size_deg): deg2rad = pi/180. new_lats = np.linspace(grid_size_deg, 180, 180) * deg2rad new_lons = np.linspace(grid_size_

我正在编写一些python代码,将不规则数据插值到180°lat x 360°lon球面网格上。当我调用以下命令时,代码当前处于挂起状态:

def geo_interp(lats,lons,data,grid_size_deg):

        deg2rad = pi/180.
        new_lats = np.linspace(grid_size_deg, 180, 180) * deg2rad
        new_lons = np.linspace(grid_size_deg, 360, 360) * deg2rad

        knotst, knotsp = new_lats.copy(), new_lons.copy()
        knotst[0] += .0001
        knotst[-1] -= .0001
        knotsp[0] += .0001
        knotsp[-1] -= .0001

        lut = LSQSphereBivariateSpline(lats.ravel(),lons.ravel(),data.T.ravel(),knotst,knotsp)

        data_interp = lut(new_lats, new_lons)
        return data_interp
当我调用上面的子例程时,我使用的数组作为参数,它们都符合文档中列出的LSQSphereBivariateSpline的要求。当我运行它时,处理180x360数据集所需的时间比我感觉的要长得多

当我使用python-m trace--trace运行脚本时,在长时间没有任何事情发生之前的最后一行输出是
fitpack2.py(1025):w=w,eps=eps)

据我所知,fitpack2.py的第1025行是一条注释,这更让人困惑

因此,我的问题是: 1.有没有办法判断它是挂着还是很慢? 2.如果它挂着,我该怎么修

我唯一能想到的是,我不知道我在做什么,因为我选择了结。有没有一个好的选择方法?我只是使用了稍后将插入的网格,因为文档中的示例似乎是任意网格

更新:大约3小时后它终于完成了,但是“插值数据”看起来像随机噪声。此外,如果这是相关的,据我所知,LSQSphereBivariateSpline是我唯一可以使用的函数,因为我的LAT和LON并没有严格增加

另外,我应该补充一点,当它完成时,它会输出以下警告:
warning(来自warnings模块):
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/Python/scipy/interpolate/fitpack2.py”,第1029行
警告。警告(消息)
用户警告:
警告返回的样条曲线的系数已计算为
(数值)秩的最小范数最小二乘解
系统缺陷(缺陷=16336,等级=48650)。特别是如果排名
由6+(nt-8)*(np-7)+ier计算的缺陷较大,
结果可能不准确。他们也可能严重依赖于
每股收益的价值。



解决方案:我的结太多,导致了缓慢的速度和无用的结果。

是的,FITPACK样条曲线拟合例程可能试图用最小二乘法解决n x n问题,其中n=360*180*k(其中k~9是样条曲线中的自由度)。这对于80年代编写的fortran代码来说太大了。如果您将您的解决方案作为答案发布并接受它,那就太好了。此外,完成此操作后,请从问题标题中删除“已解决”。谢谢