Scipy LSQSphereBivariateSpline:挂起,如何选择结?

时间:2015-03-05 02:39:07

标签: python scipy interpolation spline least-squares

我正在研究一些python代码,将不规则数据插入到180°纬度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.有没有办法判断它是悬挂还是非常慢? 如果它挂了,我该怎么办呢?

我能想到的唯一一件事就是我不知道我在做什么就选择结。有没有一个好方法可以选择那些?我刚刚使用了网格,我将稍后进行插值,因为doc中的示例似乎是一个任意网格。

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

另外,我应该在完成后添加输出以下警告:Warning (from warnings module): File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/interpolate/fitpack2.py", line 1029 warnings.warn(message) UserWarning: WARNING. The coefficients of the spline returned have been computed as the minimal norm least-squares solution of a (numerically) rank deficient system (deficiency=16336, rank=48650). Especially if the rank deficiency, which is computed by 6+(nt-8)*(np-7)+ier, is large, the results may be inaccurate. They could also seriously depend on the value of eps.


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

0 个答案:

没有答案