计算不同地理网格大小的两个数组之间的值的偏离或异常

问题描述 投票:0回答:1

我有一个技术问题,我试图整周解决。我根据观测结果创建了一个netcdf文件,该文件的空气质量测量值沿一定轨迹在地理网格(纬度/经度)上。现在,我想计算这些值与较大网格(来自计算机模型的数据在较大面积上的平均值)之间的偏离(或异常)。

我的两个netcdf文件的结构如下:

观察(仪器测量):

尺寸:

lat: 1321, lon: 1321

数据变量:

Longitude (lon) float64 8.413 8.411 8.409 ... 4.904 4.905
Latitude (lat) float64 47.4 47.4 47.41 ... 52.37 52.37
obs_data (lat, lon) float64 ...

模型数据:

尺寸:

latitude: 140, level: 1, longitude: 215, time: 24

坐标:

longitude  (longitude)  float32    357.55 357.65 ... 18.85 18.95 
latitude   (latitude)   float32    55.95 55.85 55.75 ... 42.15 42.05    
level      (level)      float32    0.0
time       (time)    timedelta64[ns]    00:00:00 01:00:00 ... 23:00:00

数据变量:

model_data (time, level, latitude, longitude) float32 ...

我尝试了各种不同的方法,但是每次遇到某种似乎无法解决的错误时,我最终不得不尝试另一种方法。我最接近的是跟随this great tutorial,但在这里我也碰壁了。当我尝试找到两个数据集的最近纬度和经度时,请按[]

lat_idx = np.abs(model_lat - obs_lat).argmin() #subtract train lat from model lat
lon_idx = np.abs(model_lon - obs_lon).argmin() #subtract train lon from model lon

我收到以下错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-437-9396b00ba22f> in <module>
     18 
     19 # Find the nearest latitude and longitude for the train data
---> 20 lat_idx = np.abs(model_lat - obs_lat).argmin()
     21 lon_idx = np.abs(model_lon - obs_lon).argmin()
     22 

~/opt/anaconda3/lib/python3.7/site-packages/numpy/ma/core.py in __sub__(self, other)
   4115         if self._delegate_binop(other):
   4116             return NotImplemented
-> 4117         return subtract(self, other)
   4118 
   4119     def __rsub__(self, other):

~/opt/anaconda3/lib/python3.7/site-packages/numpy/ma/core.py in __call__(self, a, b, *args, **kwargs)
   1024         with np.errstate():
   1025             np.seterr(divide='ignore', invalid='ignore')
-> 1026             result = self.f(da, db, *args, **kwargs)
   1027         # Get the mask for the result
   1028         (ma, mb) = (getmask(a), getmask(b))

ValueError: operands could not be broadcast together with shapes (140,) (1321,)

没有一种方法可以简单地进行计算:

anomaly = model_data[lat, lon] - obs_data[lat, lon]

我最新的希望是xarray,但我确实为他们的文档而苦恼,并且花了几天的时间才找出前进的方向。

你们中的任何人都找到了解决此问题的方法吗?任何提示都非常感谢。

我有一个技术问题,我试图整周解决。我根据观测结果创建了一个netcdf文件,该观测值是沿着某个地理网格(纬度/经度)上的空气质量的测量值,沿着某个...

python-3.x numpy matplotlib netcdf python-xarray
1个回答
0
投票

尚不清楚您要做什么或使用什么数据结构。如果以后有更多信息,我将编辑帖子。但是,我认为这可以解决问题:

© www.soinside.com 2019 - 2024. All rights reserved.