簡體   English   中英

xarray slice function 用於沿維度計算平均值的替代方法

[英]xarray slice function alternative for calculating average along a dimension

我正在使用 Xarray 和 .netCDF 氣象數據。 我有通常的尺寸時間、緯度和經度以及兩個主要變量:風速(時間、緯度、經度)和緯度 position(時間、經度)。

 <xarray.Dataset>
Dimensions:             (lon: 53, time: 25873, lat: 20)
Coordinates:
  * lon                 (lon) float64 -80.0 -77.5 -75.0 -72.5 ... 45.0 47.5 50.0
  * time                (time) datetime64[ns] 1950-01-31 ... 2020-12-01
  * lat                 (lat) float32 70.0 67.5 65.0 62.5 ... 27.5 25.0 22.5
Data variables:
    uwnd                (time, lat, lon) float32 -0.0625 0.375 ... -1.812 -2.75
    positions           (time, lon) float64 40.0 40.0 45.0 ... 70.0 70.0 70.0

對於每一次,lon,我都想計算這些位置周圍的緯度平均值。

如果我做一個循環,我會這樣做(對於 +-2.5° 緯度平均值):

for i in ds.lon.values:
        for t in ds.time.values:
              wind_averaged.loc[t,i]=ds.uwnd.sel(lon=i,time=t).sel(lat=slice(2.5+ds.positions.sel(lon=i,time=t).values,ds.positions.sel(lon=i,time=t).values-2.5)).mean('lat')

這顯然非常糟糕,我想像這樣使用slice()

wind_averaged=ds.uwnd.sel(lat=slice(2.5+ds.jet_positions.values,ds.jet_positions.values-2.5)).mean('lat')

但它給出了一個錯誤,因為我

cannot use non-scalar arrays in a slice for xarray indexing

有沒有其他方法可以通過使用 Xarray power 來做我想做的事情而不用做兩個 for 循環?

謝謝

我相信您正在尋找多維 groupby。 如果我理解正確的話,這里有一個針對這個問題的教程: https://xarray.pydata.org/en/stable/examples/multidimensional-coords.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM