我目前有一个大约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。

我会很感激您能提供的任何帮助。

最佳答案

有什么问题?您只需要使用值提取单元格的索引,然后将这些索引传递给具有“ height”值的插值函数。下面是一些执行此操作的代码。

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的提示)。

关于python - Python-插值/pcolor不均匀间隔的numpy矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13032819/

10-12 23:53