[英]Python - interpolating/pcolor unevenly spaced numpy matrix
我目前有一個大約100x120 2d numpy矩陣。 索引引用“坐標”,矩陣中的值是“高度”我試圖使用類似於此處所示的“二維樣條表示”的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類型繪圖,在帶有數據的點之間進行插值以填充這些數據。
非常感謝您提供的任何幫助。
有什么問題? 您只需要使用值提取單元格的索引,並將其傳遞給具有“height”值的interpolate函數。 下面有一些代碼可以執行此操作。
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的提示)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.