【问题标题】:scipy ndimage to fill array for matplotlib interpolated datascipy ndimage 为 matplotlib 插值数据填充数组
【发布时间】:2016-09-25 19:49:44
【问题描述】:

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

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 结果创建的数组,我尝试了从 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

【问题讨论】:

    标签: python numpy matplotlib scipy


    【解决方案1】:

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

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

    【讨论】:

    • 感谢詹姆斯的信息。尽管这似乎特别适用于图像文件处理,但您知道输出数据是否与我上面指出的格式匹配?
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多