我正在使用Python 2.7中Scipy的griddata从一些粗略采样数据中进行插值,以绘制轮廓图。简而言之,我有一个池塘,整个池塘都有一定的轮廓和深度/ pH /温度测量值。在边界处,我将深度= 0,并将pH /温度设置为与池内最近的相邻采样点相同。
但是,在运行脚本并弄乱了输入数据之后,很明显,griddata只是从我要进行插值的区域外部获取数据,并从中得出插值。我可以输入内部想要的任何数据,而与结果完全无关。
我创建了以下简化的示例,该示例似乎显示了相同的行为。在其中,我指定了一个5x5的制造数据网格,除了死点很大以外,其余全部为零。然后,我尝试在密度为4倍的网格上插值数据,以为我应该在中间看到某种峰值。相反,所有值都是一样的:零。这段代码如下:
import numpy as np
from scipy.interpolate import griddata as grid_interp
import matplotlib.pyplot as plt
########################################################################
# create input grid
input_grid = np.zeros([25,2])
k=0
for i in range(5):
for j in range(5):
input_grid[k,0] = i
input_grid[k,1] = j
k = k + 1
# put a value in the center of the grid
input_values = np.zeros([25,1])
input_values[12] = 1000000.0
# create grid to interpolate onto
target_grid = np.ones([100,100,2])
for i in range(100):
for j in range(100):
target_grid[i,j,0] = i/100*5
target_grid[i,j,1] = i/100*5
# perform interpolation
data_out = grid_interp(input_grid,input_values,target_grid[:,:,:],method='cubic',fill_value=-99)
# format for contourf
plot_array = np.zeros([100,100])
plot_array[:,:] = data_out[:,:,0]
# plot
plt.contourf(target_grid[:,:,0],target_grid[:,:,1],plot_array)
所以...在这一点上,我不确定我缺少什么。任何帮助将不胜感激。