Python插值/pcolor不等间距numpy矩阵

2024-04-19 11:17:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

[[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。在

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


Tags: 数据orghttpdocsdoc高度绘制矩阵
1条回答
网友
1楼 · 发布于 2024-04-19 11:17:23

怎么了?您只需要提取具有值的单元格的索引,并将其传递给具有“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()

结果如下:

enter image description here

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

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

相关问题 更多 >