![](/img/trans.png)
[英]How can I use dimensions and data in xarray to create a new array of data?
[英]How to reshape xarray data with new dimensions
我對xarray
庫xarray
,而且我被困在一個看起來相當簡單的任務中。 我在GRIB
文件中有不同 30 公里網格的全球氣候數據。 數據如下所示:
<xarray.Dataset>
Dimensions: (time: 736, values: 542080)
Coordinates:
number int64 0
* time (time) datetime64[ns] 2007-12-01 ... 2008-03-01T21:00:00
step timedelta64[ns] 00:00:00
surface int64 0
latitude (values) float64 89.78 89.78 89.78 ... -89.78 -89.78 -89.78
longitude (values) float64 0.0 20.0 40.0 60.0 ... 280.0 300.0 320.0 340.0
valid_time (time) datetime64[ns] 2007-12-01 ... 2008-03-01T21:00:00
Dimensions without coordinates: values
Data variables:
t2m (time, values) float32 247.30748 247.49889 ... 225.18036
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: 2020-01-21T09:40:59 GRIB to CDM+CF via cfgrib-0....
這很好。 我可以訪問不同的時間實例並繪制內容,甚至可以使用data.t2m.data
訪問每個單元格的數據。 但是,數據僅按time
和value
索引,最后一個是 - 我假設 - 一個單元格編號標識符,但沒有將latitude
和longitude
作為有意義的維度讀取。
在文檔中,作者以airtemp
再分析數據為例,這些數據由lat
、 lon
和time
索引,這就是我想要對我的數據集做的事情。
<xarray.Dataset>
Dimensions: (lat: 25, lon: 53, time: 2920)
Coordinates:
* lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0
* lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0
* time (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00
Data variables:
air (time, lat, lon) float32 ...
Attributes:
Conventions: COARDS
title: 4x daily NMC reanalysis (1948)
description: Data is from NMC initialized reanalysis\n(4x/day). These a...
platform: Model
references: http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly...
在xarray
環境中進行這種重新索引有直接的方法嗎? 我想我可以只簡單的提取numpy
陣列,並跳轉到pandas
或其他什么東西,但我覺得xarray
圖書館真正強大的和有用的。
一種方法可能是從緯度和經度變量手動構造一個pandas.MultiIndex
,將其指定為values
維度的坐標,然后取消堆疊數據集:
import pandas as pd
index = pd.MultiIndex.from_arrays(
[ds.longitude.values, ds.latitude.values], names=['lon', 'lat']
)
ds['values'] = index
reshaped = ds.unstack('values')
有關更多信息,請參閱 xarray 文檔的“重塑和重組數據”部分下的此部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.