我已经花了两天时间寻找答案,但我一直有同样的错误,我无法理解为什么。无论我做什么,我都会收到错误“ValueError:1维数据的未知插值方法数组”
我正在尝试使用griddata
将值插值为更精细的网格这是我的代码
import numpy as np
lon_ww3=array([[-10. , -10. , -10. , -10. , -10. , -10. , -10. , -10. , -10. ],
[ -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5],
[ -9. , -9. , -9. , -9. , -9. , -9. , -9. , -9. , -9. ],
[ -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5]])
lat_ww3=array([[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ]])
Z=np.random.random_sample((4,9))*3
#Create finer mesh grid
lon_pn=[-10,-9]
lat_pn=[38,42]
lon_points=np.arange(lon_pn[0],lon_pn[1]+(300./3600),300./3600)[:-1]
lat_points=np.arange(lat_pn[0],lat_pn[1]+(300./3600),300./3600)[:-1]
LON_grid,LAT_grid=np.meshgrid(lon_points,lat_points)
from scipy.interpolate import griddata
Z_interp=griddata(lon_ww3.ravel(),lat_ww3.ravel(), Z.ravel(),LON_grid,LAT_grid)
我也试过这个,显然没有成功:
Z_interp=griddata(lon_ww3.ravel(),lat_ww3.ravel(), Z.ravel(),lon_points,lat_points)
几乎可以想到的每一种可能的变化......每次我都得到同样的错误:
“ValueError:”第n个“维数据”的未知插值方法数组[LON_grid]“
任何人都可以尝试重现代码并帮助我找出正在发生的事情吗?
提前致谢
保
答案 0 :(得分:1)
您对griddata的使用是错误的。
将这些行添加到代码示例中。
xi = np.c_[lon_ww3.ravel(),lat_ww3.ravel()]
xx = np.c_[LON_grid.ravel(),LAT_grid.ravel()]
Z_interp=griddata(xi,Z.ravel(),xx)
xi
是原始网格点的n,D
向量。
xx
是插值点的N,D
向量。
np.c_
是坐标每个方向的列堆栈。
答案 1 :(得分:0)
事实上,documentation for griddata中有一个很好的例子 第一个参数必须是一列坐标(每个轴不是两个单独的值),第二个是值列,第三个是新网格(不是两个separete值)。您提供了5个参数,这些参数定义为错误的来源。
网格创建也存在一些问题。这是有效的代码:
import numpy as np
from scipy.interpolate import griddata
lon_ww3 = np.array([[-10. , -10. , -10. , -10. , -10. , -10. , -10. , -10. , -10. ],
[ -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5, -9.5],
[ -9. , -9. , -9. , -9. , -9. , -9. , -9. , -9. , -9. ],
[ -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5, -8.5]])
lat_ww3 = np.array([[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ],
[ 38. , 38.5, 39. , 39.5, 40. , 40.5, 41. , 41.5, 42. ]])
# in fact you'd better initialise them like this
#lon_ww3, lat_ww3 = np.mgrid[-10:-9:3j,38:42:9j]
# make the column of [lon,lat] values
lon_lat = np.c_[lon_ww3.ravel(), lat_ww3.ravel()]
Z = np.random.random_sample((lon_ww3.shape))*3
# make the propper grid
LON_grid, LAT_grid = np.mgrid[-10:-9:12j,38:42:48j]
Z_interp = griddata(lon_lat, Z.ravel(), (LON_grid, LAT_grid))
# you can see what you've done like this
import matplotlib.pyplot as plt
plt.imshow(Z_interp.T, extent = (-10, -8.5, 38, 42))
plt.show()