繁体   English   中英

网格数据的插值

[英]Interpolation of gridded data

我希望有人可以帮助我解决我遇到的问题(我对python还是很陌生)。 我一直在尝试从50x4数组中插值数据,该数组是从下面的excel工作表读取的。

 [ 60.      0.     23.88   22.38 ]  
 [ 60.      5.     19.508  28.2  ]  
 [ 60.     10.     16.9    32.23 ]  
 [ 60.     15.     15.4    34.03 ]  
 [ 60.     20.     14.4    35.12 ]  
 [ 60.     25.     13.66   36.02 ]  
 [ 60.     30.     13.14   36.61 ]  
 [ 60.     35.     12.69   37.14 ]  
 [ 60.     40.     12.53   37.56 ]  
 [ 60.     50.     12.33   38.32 ]  
 [ 70.      0.     19.3    21.34 ]  
 [ 70.      5.     16.06   25.37 ]  
 [ 70.     10.     13.74   28.08 ]  
 [ 70.     15.     12.33   40.07 ]  
 [ 70.     20.     11.45   41.78 ]  
 [ 70.     25.     10.77   42.8  ]

等等...

我想要实现的是在第一列和第二列中输入对应于插值的2个值(例如65和12),它将返回第3列和第4列的插值。我设法使用Matlab中的griddata函数。 但是在python中还没有运气。

提前致谢

我认为scipy.interpolate可能与MATLAB的Griddata相同(或至少相似)。 下面的代码使用径向基函数进行插值。 我仅以第3列作为z轴作为示例。

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = np.array([60] * 10 + [70] * 6)
y = np.array([0,5,10,15,20,25,30,35,40,50,0,5,10,15,20,25])
z = np.array([23.88, 19.508, 16.9, 15.4, 14.4, 13.66, 13.14, 12.69, 12.53, 12.33, 19.3, 16.06, 13.74, 12.33, 11.45, 10.77])
x_ticks = np.linspace(60, 70, 11)
y_ticks = np.linspace(0, 50, 51)    
XI, YI = np.meshgrid(x_ticks, y_ticks)

rbf = interpolate.Rbf(x, y, z, epsilon=2)
ZI = rbf(XI, YI)
print(ZI[np.argwhere(y_ticks==12)[0][0], np.argwhere(x_ticks==65)[0][0]])

>>> 14.222288614849171

请注意,结果是ZI[y,x] ,而不是ZI[x,y] 另外请注意,您的报价必须包含所查询的x和y值,否则会出现IndexError。

也许您可以根据需要建立该解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM