簡體   English   中英

Python - 插值/ pcolor不均勻間隔的numpy矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM