我有來自 ECMWF 的資料,當讀入 xarray 時看起來像這樣
Dimensions: (time: 424, step: 12, latitude: 3, longitude: 2)
Coordinates:
number int64 0
* time (time) datetime64[ns] 1990-03-01T06:00:00 ... 1993-04-22T18:0...
* step (step) timedelta64[ns] 01:00:00 02:00:00 ... 11:00:00 12:00:00
surface float64 0.0
* latitude (latitude) float64 41.0 40.75 40.5
* longitude (longitude) float64 -96.92 -96.67
valid_time (time, step) datetime64[ns] 1990-03-01T07:00:00 ... 1993-04-2...
Data variables:
i10fg (time, step, latitude, longitude) float32 4.876 4.637 ... 3.959
Attributes:
GRIB_edition: 1
GRIB_centre: ecmf
GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts
GRIB_subCentre: 0
Conventions: CF-1.7
institution: European Centre for Medium-Range Weather Forecasts
history: 2022-04-23T22:18 GRIB to CDM CF via cfgrib-0.9.9...
我已經堆疊了time和step尺寸以制作一個新的名為forecast. 然后我添加了另一個名為的維度valid并將其設定為等于坐標valid_time。兩者valid和fcst長度相同,但我現在想洗掉fcst尺寸。但是,當我這樣做時,資料變數也會被洗掉。有誰知道如何解決這一問題?這是我的示例代碼。可能有更好的方法來做我正在做的事情,但我對 xarray 還是很陌生!
ds = ds.stack(fcst=("time", "step")).transpose("fcst", "latitude", "longitude")
ds.expand_dims(valid=ds['valid_time']).drop_dims('fcst')
這讓我有了
<xarray.Dataset>
Dimensions: (valid: 5088, latitude: 3, longitude: 2)
Coordinates:
* valid (valid) datetime64[ns] 1990-03-01T07:00:00 ... 1993-04-23T06:0...
number int64 0
surface float64 0.0
* latitude (latitude) float64 41.0 40.75 40.5
* longitude (longitude) float64 -96.92 -96.67
Data variables:
*empty*
我嘗試設定valid為索引然后洗掉,fcst但它仍然洗掉資料變數。
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
xarray 資料集中的所有變數都必須按命名維度進行索引。您可以使用ds.reset_index`洗掉與維度關聯的任何標記坐標,但這不是您想要的。你不能簡單地取消一個維度而不丟失用這個維度索引的變數。
來自資料結構的 xarray 檔案:
維度名稱始終存在于 xarray 資料模型中:如果您不提供它們,則會創建 dim_N 形式的默認值。
相反,您可以使用 將非索引坐標交換為索引坐標swap_dims。這將在您的陣列valid_time中進行切換fcst,從而成為索引和以前由(在您的情況下)索引的任何變數valid_time的維度。fcstfcsti10fg
所以答案是,在堆疊之后但沒有expand_dimsor drop:
ds.swap_dims({'fcst': 'valid_time'}).drop('fcst')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464617.html
上一篇:從光流計算散度和卷曲并繪制它
