首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从一个不规则网格到另一个不规则间距网格的Scipy数据插值

从一个不规则网格到另一个不规则间距网格的Scipy数据插值
EN

Stack Overflow用户
提问于 2011-08-05 23:39:05
回答 1查看 1.7K关注 0票数 3

我正在为两个网格之间的插值而苦苦挣扎,我无法为我的问题找到合适的解决方案。

我有两个不同的2D网格,其中的节点点由它们的X和Y坐标定义。网格本身不是矩形的,而是大致形成一个平行四边形(因此,(i,j)的X坐标与(i,j+1)的X坐标不同,(i,j)的Y坐标与(i+1,j)的Y坐标不同。这两个网格都有37*5的形状,它们几乎完全重叠。

对于第一个网格,我有每个点的X坐标,Y坐标和压力值。现在我想在第二个网格上插值第一个网格的压力分布(每个点的X和Y也是已知的)。

我尝试了不同的插值方法,但由于网格点的不规则分布,我的最终结果从来都不正确。作为interp2d或griddata的函数需要一维数组作为输入,但如果我这样做,插值的解决方案是错误的(即使我在原始网格上再次插值来自原始网格的压力值,新的压力值也与原始值相差数英里。

对于不同不规则网格上的一维插值,我使用:

代码语言:javascript
代码运行次数:0
运行
复制
def interpolate(X, Y, xNew):
    if xNew<X[0]:
        print 'Interp Warning :', xNew,'is under the interval [',X[0],',',X[-1],']'
        yNew = Y[0]
    elif  xNew>X[-1]:
        print 'Interp Warning :', xNew,'is above the interval [',X[0],',',X[-1],']'
        yNew = Y[-1]
    elif xNew == X[-1] : yNew = Y[-1]
    else:
        ind = numpy.argmax(numpy.bitwise_and(X[:-1]<=xNew,X[1:]>xNew))
        yNew = Y[ind] + ((xNew-X[ind])/(X[ind+1]-X[ind]))*(Y[ind+1]-Y[ind])

    return yNew

但对于2D,我认为网格数据会更容易使用。有没有人有插值的经验,我的输入是网格和数据的二维数组?

EN

回答 1

Stack Overflow用户

发布于 2012-07-08 22:36:45

再看一看interp2d。http://docs.scipy.org/scipy/docs/scipy.interpolate.interpolate.interp2d/#scipy-interpolate-interp2d

请注意“参数”下“x,y”部分中的第二个示例。“x”和“y”是松散意义上的一维,但它们可以是扁平化的数组。

应该是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
f = scipy.interpolate.interp2d([0.25, 0.5, 0.27, 0.58], [0.4, 0.8, 0.42,0.83], [3, 4, 5, 6])

znew = f(.25,.4)

print znew
[ 3.]

znew = f(.26,.41)   # midway between (0.25,0.4,3) and (0.27,0.42,5)

print znew
[ 4.01945345]     # Should be 4 - close enough?

我本以为可以将扁平化的'xnew‘和'ynew’数组传递给'f()‘,但我无法让它工作。不过,'f()‘函数将接受行和列的语法,这对您没有什么用处。由于'f()‘的这个限制,你必须将'znew’作为循环的一部分来计算--可能应该看看nditer。当'(xnew,ynew)‘在'(x,y)’域外时,还要确保它能做你想做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6958931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档