scipy ndimage为matplotlib内插数据填充数组

时间:2016-09-25 19:49:45

标签: python numpy matplotlib scipy

我有一组数据表示使用等高线图绘制时可能看起来像地形图的数据。我希望将数组扩展为' interpolate'用户选择的间隔点之间的数据,然后用现有数据点之间的平均值填充缺失的元素。例如:

Original Array:
[[1 2 3]
[4 5 6]
[7 8 9]]

with 1X expansion becomes:
[[1 . 2 . 3]
[. . . . .]
[4 . 5 . 6]
[. . . . .]
[7 . 8 . 9]]

并填写了'。'值将是数据点区域中这些值的平均值。我知道有很多方法可以用scipy.ndimage过滤器做这样的事情,但似乎它们都改变了原始数据值,即gaussian_filter和ndimage.zoom。

我想知道是否有一个我想要的过滤器会扩展此数据阵列并将原始值保留在其扩展位置,并使用“插值”填充缺失点。平均值?如果有人能指出我正确的方向,我会检查出来,但我所有的搜索和测试都没有产生我想要的结果。

以下是来自的适用代码示例。原始的x,y和z值来自于从mysql数据库上的sql结果创建的数组,我已尝试过' order'从0到5的变化,我可以找到所有列出的模式,并预打开和关闭。我也尝试过使用gaussian_filter的一些选项。插值是从用户输入传递的1到10之间的数字:

x=np.array(self.lon)
y=np.array(self.lat)
z=np.array(self.plotdata)
if (int(interpolation)>0):
    x=scipy.ndimage.zoom(x, int(interpolation), order=0, mode='nearest', prefilter=True)
    y=scipy.ndimage.zoom(y, int(interpolation), order=0, mode='nearest', prefilter=True)
    z=scipy.ndimage.zoom(z, int(interpolation), order=0, mode='nearest', prefilter=True)

TIA

1 个答案:

答案 0 :(得分:0)

我做了类似的事情并且遇到了ndimage.zoom的问题。它正在扭曲图像,我对结果从未满意。我找到了skimage.transform.resize。这样做效果更好,可能对您有用。

http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.resize