Python和科学计算认证群组  - 讨论区

标题:scipy的插值问题

2011年01月04日 星期二 17:58

我有一组格点,想用双线性插值,但是不知道哪个函数提供了这个方法?

试着用了一下interp2d这个函数,但并不是想要的结果。

比如令数组 a 为:

[[100, 10, 100]

    [100, 10, 10]

    [100, 10, 100]]

x = np.arange(3)

y = np.arange(3)

f = interp2d(x, y, a, kind = 'linear')


f(1.5, 1)打印出来的结果会是-11.6,而我希望的结果是10。是我哪个地方错了,还是这个函数在进行线性插值的时候考虑勒整个数组,而不仅仅是周围4个点?要怎样才能达到双线性插值的效果呢?

我用的暂时还是scipy 0.8, 0.9里面有的一个griddata函数还没有试过。

谢谢!

2011年01月04日 星期二 18:28

from scipy import interpolate

 

import numpy as np

 

 

a = np.array([[100.0, 10, 100],

[100, 10, 10],

[100, 10, 100]])

 

x, y = np.mgrid[:3,:3]

 

f = interpolate.interp2d(x, y, a, kind="linear")

print f(1.5, 1)

 

二维插值的用法在书中有介绍,x和y应该是用mgrid产生二维数组。

 

2011年01月04日 星期二 20:06

RY老师,那如果x和y是像我那样取值的话得到的结果是什么意思呢?我是看scipy的文档上说:

x, y : 1D arrays

Arrays defining the coordinates of a 2D grid. If the points lie on a regular grid, x can specify the column coordinates and y the row coordinates, for example:

x = [0,1,2]; y = [0,3,7]

otherwise x and y must specify the full coordinates, for example:

x = [0,1,2,0,1,2,0,1,2]; y = [0,0,0,3,3,3,7,7,7]

 

所以我觉得我那个数据是规则格点,我想写成那样应该可以吧,但是得出来的结果不一样。

还有就是书上说:interp2d 类只能对等间距的网格形状的取样值进行插值运算。那这里这个例子的 y 应该不算等间距吧?

2011年01月04日 星期二 20:54

前面我的程序有问题,应该是

y,x = np.mgrid[:3,:3]

结果和你的一样。因此interp2d不是简单的双线性插值。

我查了一下,双线性插值可以用ndimage模块中的map_coordinates

 

from scipy.ndimage.interpolation import map_coordinates

 

import numpy as np

 

 

a = np.array([[100.0, 10, 100],

[100, 10, 10],

[100, 10, 100]])

 

print map_coordinates(a, [[1.5],[1]], order=1)

2011年01月04日 星期二 21:05

map_coordinates的第二个参数是一个有两个元素的列表,其中每个元素都是一个列表,分别给出第0轴和第1轴的坐标。因此上面的例子是第0轴在1.5,第1轴在1的位置的值。

下面的程序对原始数据进行双线性插值,并显示结果图像:

from scipy.ndimage.interpolation import map_coordinates

 

import numpy as np

 

 

a = np.array([[100.0, 10, 100],

[100, 10, 10],

[100, 10, 100]])

 

x,y = np.mgrid[:2:100j,:2:100j]

 

z = map_coordinates(a,[x.flatten(),y.flatten()], order=1)

z = z.reshape(100,-1)

import pylab as pl

pl.imshow(z)

pl.show()

2011年01月04日 星期二 21:40

好的,明白了,谢谢!这种函数居然都能让您给找到。。。

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号