Vor*_*ity 5 python numpy matplotlib scipy map-projections
我试图将具有相关纬度和经度的不规则网格化数据集(原始卫星数据)映射到由给定的经常网格化的纬度和经度集basemap.makegrid().我使用matplotlib.mlab.griddata与mpl_toolkits.natgrid安装.下面是whosipython中用作输出的变量列表以及变量的一些统计信息:
Variable Type Data/Info
-------------------------------
datalat ndarray 666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)
datalon ndarray 666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)
gridlat ndarray 1200x1000: 1200000 elems, type `float64`, 9600000 bytes (9 Mb)
gridlon ndarray 1200x1000: 1200000 elems, type `float64`, 9600000 bytes (9 Mb)
var ndarray 666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)
In [11]: var.min()
Out[11]: -30.0
In [12]: var.max()
Out[12]: 30.0
In [13]: datalat.min()
Out[13]: 27.339874
In [14]: datalat.max()
Out[14]: 47.05302
In [15]: datalon.min()
Out[15]: -137.55658
In [16]: datalon.max()
Out[16]: -108.41629
In [17]: gridlat.min()
Out[17]: 30.394031556984299
In [18]: gridlat.max()
Out[18]: 44.237140350357713
In [19]: gridlon.min()
Out[19]: -136.17646180595321
In [20]: gridlon.max()
Out[20]: -113.82353819404671
Run Code Online (Sandbox Code Playgroud)
datalat并且datalon是原始数据坐标
gridlat并且gridlon是插入的坐标
var 包含实际数据
使用这些变量,当我调用griddata(datalon, datalat, var, gridlon, gridlat)它时花了长达20分钟来完成并返回一个数组nan.从查看数据看,纬度和经度似乎是正确的,原始坐标与新区域的一部分重叠,而一些数据点位于新区域之外.有没有人有什么建议?纳米值表明我做了一些愚蠢的事......
看起来该mlab.griddata例程可能会对您的输出数据引入可能不必要的额外约束。虽然输入位置可以是任何位置,但输出位置必须是规则网格- 因为您的示例位于纬度/经度空间中,所以您选择的地图投影可能会违反这一点(即 x/y 中的规则网格不是纬度中的规则网格) /长)。
您可以尝试使用SciPyinterpolate.griddata中的例程作为替代方案 - 不过,您需要将位置变量组合到单个数组中,因为调用签名不同:类似于
import scipy.interpolate
data_locations = np.vstack(datalon.ravel(), datalat.ravel()).T
grid_locations = np.vstack(gridlon.ravel(), gridlat.ravel()).T
grid_data = scipy.interpolate.griddata(data_locations, val.ravel(),
grid_locations, method='nearest')
Run Code Online (Sandbox Code Playgroud)
用于最近邻插值。这会将位置放入一个数组中,该数组有 2 列对应于您的 2 个维度。您可能还想在地图投影的变换空间中执行插值。
| 归档时间: |
|
| 查看次数: |
3168 次 |
| 最近记录: |