Xarray select 基于变量的值
Xarray select value based on variable
我有一个 .nc
文件,我用 xarray
打开它作为数据集。该数据集有 3 个变量:
- 乐队 (5000x300x250)
- 纬度 (300x250)
- 经度 (300x250)
它的尺寸是:
- 时间 (5000)
- y (300)
- x (250)
我自己创建的数据集出错了,因为我想根据其坐标值“抓取”“波段”特定点的时间序列:
dataset.Band.sel(longitude=6.696e+06,latitude=4.999e+05,method='nearest')
(我根据两个变量的第一个值获取值)。
问题是,当我创建 .nc
文件时,我没有输入纬度和经度作为维度,而是作为变量。有没有一种方法可以使用我的代码但修改一些东西以便我可以根据变量纬度和经度的最接近值来获取点?或者我应该完全重新定义 .nc
的尺寸以用 longitude
和 latitude
替换 x
和 y
?
没有使用 lat/lon 值 select 数据的好方法 - 因为您的数据是结构化的,所以您基本上具有多维坐标。
也就是说,如果您的 lat/lon 实际上仅由 x OR y 索引;也就是说,latitude
对 x
的所有级别反复重复相同的值,对 longitude
和 y
重复相同的值,您可以很容易地重新组织数据:
lats = dataset.latitude.mean(dim='x')
lons = dataset.longitude.mean(dim='y')
dataset = dataset.drop(['latitude', 'longitude'])
dataset.coords['latitude'] = latitude
dataset.coords['longitude'] = longitude
dataset = dataset.swap_dims({'x': 'longitude', 'y': 'latitude'})
此时,您的数据已按 time, latitude, longitude
编制索引,您可以 select 随心所欲地处理数据
我有一个 .nc
文件,我用 xarray
打开它作为数据集。该数据集有 3 个变量:
- 乐队 (5000x300x250)
- 纬度 (300x250)
- 经度 (300x250)
它的尺寸是:
- 时间 (5000)
- y (300)
- x (250)
我自己创建的数据集出错了,因为我想根据其坐标值“抓取”“波段”特定点的时间序列:
dataset.Band.sel(longitude=6.696e+06,latitude=4.999e+05,method='nearest')
(我根据两个变量的第一个值获取值)。
问题是,当我创建 .nc
文件时,我没有输入纬度和经度作为维度,而是作为变量。有没有一种方法可以使用我的代码但修改一些东西以便我可以根据变量纬度和经度的最接近值来获取点?或者我应该完全重新定义 .nc
的尺寸以用 longitude
和 latitude
替换 x
和 y
?
没有使用 lat/lon 值 select 数据的好方法 - 因为您的数据是结构化的,所以您基本上具有多维坐标。
也就是说,如果您的 lat/lon 实际上仅由 x OR y 索引;也就是说,latitude
对 x
的所有级别反复重复相同的值,对 longitude
和 y
重复相同的值,您可以很容易地重新组织数据:
lats = dataset.latitude.mean(dim='x')
lons = dataset.longitude.mean(dim='y')
dataset = dataset.drop(['latitude', 'longitude'])
dataset.coords['latitude'] = latitude
dataset.coords['longitude'] = longitude
dataset = dataset.swap_dims({'x': 'longitude', 'y': 'latitude'})
此时,您的数据已按 time, latitude, longitude
编制索引,您可以 select 随心所欲地处理数据