【问题标题】:Python - interpolating/pcolor unevenly spaced numpy matrixPython - 插值/pcolor 不均匀间隔的 numpy 矩阵
【发布时间】:2012-10-23 14:31:45
【问题描述】:

我目前有一个大约 100x120 的 2d numpy 矩阵。索引指的是“坐标”,矩阵中的值是“高度”我正在尝试使用类似于此处显示的“二维样条表示”的 pcolor 绘制此数据:

http://docs.scipy.org/doc/scipy-0.7.x/reference/tutorial/interpolate.html

我的问题是,虽然我所有的“坐标”和“高度”都是整数,但坐标不是均匀的空间。例如,只有特定的行包含数据(不等间距),并且包含数据的每一行对于其他每个条目都只有一个“高度”值(每行包含数据的间距相同)。我的意思的一个简单例子如下:

[[nan,   3, nan,   1, nan,   2], 
 [nan, nan, nan, nan, nan, nan],
 [nan,   5, nan,   2, nan,   3],
 [nan, nan, nan, nan, nan, nan],
 [nan, nan, nan, nan, nan, nan],
 [nan, nan, nan, nan, nan, nan],
 [nan,   4, nan,   1, nan,   2]]

我一直在尝试遵循我链接到的插值/pcolor 示例,但没有成功。我的目标是在我的所有数据上绘制一个漂亮的连续 pcolor 类型图,在数据点之间插值以填充这些 nan。

如果您能提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: python numpy matplotlib scipy mayavi


    【解决方案1】:

    有什么问题?您只需要提取具有值的单元格的索引并将它们传递给具有“高度”值的插值函数。下面有一些代码可以做到这一点。

    import numpy as np
    from numpy import nan
    from scipy import interpolate
    import matplotlib.pyplot as plt
    
    a = np.array([[nan,   3, nan,   1, nan,   2], 
     [nan, nan, nan, nan, nan, nan],
     [nan,   5, nan,   2, nan,   3],
     [nan, nan, nan, nan, nan, nan],
     [nan, nan, nan, nan, nan, nan],
     [nan, nan, nan, nan, nan, nan],
     [nan,   4, nan,   1, nan,   2]])
    
    x, y = np.where(np.isfinite(a))
    z = a[x,y]
    
    xnew,ynew = np.mgrid[0:6:70j,0:6:70j]
    tck = interpolate.bisplrep(x,y,z,s=0, kx=1, ky=1)
    znew = interpolate.bisplev(xnew[:,0],ynew[0,:],tck)
    
    plt.figure()
    plt.pcolor(xnew,ynew,znew)
    plt.colorbar()
    plt.title("Interpolated function.")
    plt.show()
    

    结果将如下所示:

    请注意,这与矩阵的确切方向不匹配。为此,您必须将绘图的原点更改为位于左上角,并可能转置数据。我会把它作为练习留给你。

    此外,获取非 na 值的索引的方法有点粗糙,所以也许其他人可以对此发表评论(感谢 seberg 的提示)。

    【讨论】:

    • 只需使用x, y = np.where(np.isfinite(a)); z = a[x,y]
    猜你喜欢
    • 2021-08-31
    • 2015-09-22
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多