Datacube Xarray 按时间排序和 select 数组
Datacube Xarray sort and select arrays by time
我有一个用 Xarray 打开的数据立方体,它有几个变量和一个时间向量(“mid_date
”,维度 18206
),格式为 datetime64
.
变量是18206 x 334 x 333
。
问题是时间向量根本没有排序,我想按升序(从旧到新)对它进行排序。同时,重组我的变量数组。
然后,我想在 2 个日期之间 select 变量的一部分(例如:“vy
”)(这样我就可以只对一部分数据进行计算) .
我可以对日期向量进行排序,但不能对其他变量应用该排序。我该怎么做?
这里是数据集的信息:
<xarray.Dataset>
Dimensions: (mid_date: 18206, y: 334, x: 333)
Coordinates:
* mid_date (mid_date) datetime64[ns] 2011-10-01T00:00:00....
* x (x) float64 4.868e+05 4.871e+05 ... 5.665e+05
* y (y) float64 6.696e+06 6.696e+06 ... 6.616e+06
Data variables: (12/43)
UTM_Projection object ...
acquisition_img1 (mid_date) datetime64[ns] ...
acquisition_img2 (mid_date) datetime64[ns] ...
autoRIFT_software_version (mid_date) float64 ...
chip_size_height (mid_date, y, x) float32 ...
chip_size_width (mid_date, y, x) float32 ...
...
vy (mid_date, y, x) float32 ...
vy_error (mid_date) float32 ...
vy_stable_shift (mid_date) float64 ...
vyp (mid_date, y, x) float64 ...
vyp_error (mid_date) float64 ...
vyp_stable_shift (mid_date) float64 ...
Attributes:
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
datacube_software_version: 1.0
date_created: 30-01-2021 20:49:16
date_updated: 30-01-2021 20:49:16
institution: NASA Jet Propulsion Laboratory (JPL), Califor...
projection: 32607
title: ITS_LIVE datacube of image_pair velocities
我试过了:
test = datacube.vy.sel(mid_date=slice("2010-01","2013-01"))
或
test = datacube.vy.sel(mid_date=slice(datetime.datetime("2010-01-01"),datetime.datetime("2013-01-01")))
和
test = datacube.vy.sel(mid_date=slice(np.datetime64(2010, 1, 1, 1, 1),np.datetime64(2013, 1, 1, 1, 1)))
但没有任何效果。
我看到两个可能的解决方案:
1/ 根据您想要的明确日期列表进行选择
import numpy as np
from datetime import datetime
da = datacube.vy
filter_dates = filter(lambda d: (d >= np.datetime64(datetime(2010, 1, 1))) & (d < np.datetime64(datetime(2013, 1, 1))),
da.mid_date.values)
the_dates_you_want = list(filter_dates)
da[da.mid_date.isin(the_dates_you_want)]
2/ 选择前重新索引
new_time = sorted(da.mid_date.values)
da = da.reindex(mid_date = new_time)
da.sel(mid_date = slice(datetime(2010, 1, 1), datetime(2013, 1, 1)))
我有一个用 Xarray 打开的数据立方体,它有几个变量和一个时间向量(“mid_date
”,维度 18206
),格式为 datetime64
.
变量是18206 x 334 x 333
。
问题是时间向量根本没有排序,我想按升序(从旧到新)对它进行排序。同时,重组我的变量数组。
然后,我想在 2 个日期之间 select 变量的一部分(例如:“vy
”)(这样我就可以只对一部分数据进行计算) .
我可以对日期向量进行排序,但不能对其他变量应用该排序。我该怎么做?
这里是数据集的信息:
<xarray.Dataset>
Dimensions: (mid_date: 18206, y: 334, x: 333)
Coordinates:
* mid_date (mid_date) datetime64[ns] 2011-10-01T00:00:00....
* x (x) float64 4.868e+05 4.871e+05 ... 5.665e+05
* y (y) float64 6.696e+06 6.696e+06 ... 6.616e+06
Data variables: (12/43)
UTM_Projection object ...
acquisition_img1 (mid_date) datetime64[ns] ...
acquisition_img2 (mid_date) datetime64[ns] ...
autoRIFT_software_version (mid_date) float64 ...
chip_size_height (mid_date, y, x) float32 ...
chip_size_width (mid_date, y, x) float32 ...
...
vy (mid_date, y, x) float32 ...
vy_error (mid_date) float32 ...
vy_stable_shift (mid_date) float64 ...
vyp (mid_date, y, x) float64 ...
vyp_error (mid_date) float64 ...
vyp_stable_shift (mid_date) float64 ...
Attributes:
GDAL_AREA_OR_POINT: Area
author: ITS_LIVE, a NASA MEaSUREs project (its-live.j...
datacube_software_version: 1.0
date_created: 30-01-2021 20:49:16
date_updated: 30-01-2021 20:49:16
institution: NASA Jet Propulsion Laboratory (JPL), Califor...
projection: 32607
title: ITS_LIVE datacube of image_pair velocities
我试过了:
test = datacube.vy.sel(mid_date=slice("2010-01","2013-01"))
或
test = datacube.vy.sel(mid_date=slice(datetime.datetime("2010-01-01"),datetime.datetime("2013-01-01")))
和
test = datacube.vy.sel(mid_date=slice(np.datetime64(2010, 1, 1, 1, 1),np.datetime64(2013, 1, 1, 1, 1)))
但没有任何效果。
我看到两个可能的解决方案:
1/ 根据您想要的明确日期列表进行选择
import numpy as np
from datetime import datetime
da = datacube.vy
filter_dates = filter(lambda d: (d >= np.datetime64(datetime(2010, 1, 1))) & (d < np.datetime64(datetime(2013, 1, 1))),
da.mid_date.values)
the_dates_you_want = list(filter_dates)
da[da.mid_date.isin(the_dates_you_want)]
2/ 选择前重新索引
new_time = sorted(da.mid_date.values)
da = da.reindex(mid_date = new_time)
da.sel(mid_date = slice(datetime(2010, 1, 1), datetime(2013, 1, 1)))