grid - Scipy-从一个不规则网格到另一不规则间隔网格的数据插值

标签 grid 2d scipy interpolation

我正在努力处理两个网格之间的插值,但是找不到适合我问题的合适解决方案。

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

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

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

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

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,我认为griddata会更易于使用。有人在我的输入是网格和数据的二维数组的插值方面有经验吗?

最佳答案

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

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

应该是这样的:

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)'域之外时,还要确保它能满足您的要求。

关于grid - Scipy-从一个不规则网格到另一不规则间隔网格的数据插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958931/

相关文章:

css - 带有图案的响应式 CSS 网格

model-view-controller - Ext JS 4 - 如何创建多个商店实例并分配给 View ? (MVC)

java - 在 Java 中为具体类型重写 equals() 有什么好处吗?

algorithm - 运动圆与固定线段的二维碰撞

c - 如何在 C 中不使用指针的情况下通过函数传递 2D 数组

python - 传递 Pandas 数据时,Scipy linregress 返回元组

html - 不需要的滚动条右边距

css - 列数在 Chrome 中正常,但在 IE 和 Firefox 中不正常

python - Elastic Beanstalk SciPy.* 无提示地失败

python - 模块未找到错误 : No module named 'scipy' in python 3. 9