Ich habe folgendes Problem:Fehler beim regridding 3-D-Satellitendaten in Python mit Basemap, 2-D arbeiten
Ich habe Wolkendecke Datensätze von verschiedenen Satelliten, die ich auf das Gitter eines Klima regrid will Modell, um Vergleiche zwischen der Modellausgabe und den beobachteten Satellitendaten zu ziehen.
Für jetzt verwendete ich die interp-Funktion von Grundkarte, die perfekt für Arrays in der Form funktioniert: 1 x Länge x Breite, aber es funktioniert nicht für Arrays der Form n x Länge x Breite. Was wäre der beste Weg, um diese Art von 3-D-Arrays neu zu regulieren?
from mpl_toolkits.basemap import interp
import xarray as xr
def regrid_MAR10km(x_in,y_in,data_in):
mar_10km = xr.open_dataset('/media/..../MAR_10km /MARv3.5.2-10km-ERA-2008.nc')
lat = mar_10km['LAT']
lon = mar_10km['LON']
result = interp(data_in, x_in, y_in,lon,lat)
return result
Mein Problem ist, dass ich Fehlermeldungen der folgenden Form erhalten, wenn ich versuche, 3-D-Daten zu verwenden, ist das Array in meinem Fall der Form 161 (die die Wolkendecke für jeden Monat ist!) x lon x lat
<xarray.DataArray 'Cloud_Fraction_Mask_Total_Mean' (Begin_Date: 161, lat: 28, lon: 110)>
[495880 values with dtype=float64]
Coordinates:
* Begin_Date (Begin_Date) datetime64[ns] 2002-07-01 2002-08-01 2002-09-01 ...
* lat (lat) float32 85.5 84.5 83.5 82.5 81.5 80.5 79.5 78.5 77.5 ...
* lon (lon) float32 -94.5 -93.5 -92.5 -91.5 -90.5 -89.5 -88.5 ...
Und das ist der Fehler, dass es produziert:
IndexError Traceback (most recent call last)
<ipython-input-19-5117a62e570e> in <module>()
----> 1 cloud_regrid = fc.regrid_MAR10km(longitude,latitude,cloud_data_UD)
/media/sf_Shared/Black_and_bloom/CODE/functions.py in regrid_MAR10km(x_in, y_in, data_in)
20 lat = mar_10km['LAT']
21 lon = mar_10km['LON']
---> 22 result = interp(data_in, x_in, y_in,lon,lat)
23 return result
/home/sh16450/miniconda3/envs/snowflakes/lib/python3.5/site-packages/mpl_toolkits/basemap/__init__.py in interp(datain, xin, yin, xout, yout, checkbounds, masked, order)
4958 dataout = (1.-delx)*(1.-dely)*datain[yi,xi] + \
4959 delx*dely*datain[yip1,xip1] + \
-> 4960 (1.-delx)*dely*datain[yip1,xi] + \
4961 delx*(1.-dely)*datain[yi,xip1]
4962 elif order == 0:
IndexError: index 41 is out of bounds for axis 1 with size 28