Python griddata 网格化

2 投票
2 回答
10093 浏览
提问于 2025-04-16 19:37

在Python中,我想用scipy.interpolate.griddata这个函数来插值一些数据。

因为我想把不均匀分布的原始数据在X-Y网格图上转换成均匀分布的XI-YI网格,所以我需要使用一个网格(meshgrid),像这样:

X, Y = numpy.meshgrid([1,2,3], [2,5,6,8])
XI,YI = numpy.meshgrid([1,2,3],[4,5,6,7])
print scipy.interpolate.griddata(X,Y,X**2+Y**2,XI,YI)

可惜的是,scipy的griddata函数似乎不接受矩阵作为x、y、z的输入,这和matlab的griddata函数不一样。有没有人能给我一些解决这个问题的建议?

2 个回答

0

我觉得你需要调整一下你的网格,griddata 这个函数需要的是一组点,这些点的坐标应该以列的形式排列:

points = transpose(reshape((X,Y), (2,12)))
pointsI = transpose(reshape((XI,YI), (2,12)))
Z = reshape(X**2+Y**2, 12)

print scipy.interpolate.griddata(points, Z, pointsI)
3

在你的情况下,正确的调用顺序是

print scipy.interpolate.griddata((X.ravel(),Y.ravel()), (X**2+Y**2).ravel(), (XI, YI))

也就是说,你需要把输入的数据点转换成一维的格式。(在下一个版本的Scipy中,这个问题可能会被修复,不需要使用.ravel()了。)

撰写回答