0

我有一个用 Xarray 打开的数据立方体,它有几个变量和一个格式为的时间向量(“ mid_date”,维度18206datetime64

变量是18206 x 334 x 333。问题是时间向量根本没有排序,我想按升序(从最旧到最近)对其进行排序。同时,重新组织我的变量数组。

然后,我想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)))

但没有任何效果。

4

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)))
于 2022-01-15T17:17:50.637 回答