0

Xarray で開かれた datacube があります。これには、いくつかの変数と時間ベクトル (" mid_date"、 dimension 18206) が format にありますdatetime64

変数は18206 x 334 x 333. 問題は、時間ベクトルがまったくソートされていないことです。昇順 (古いものから最新のものへ) でソートしたいと考えています。同時に、変数の配列を再編成します。

次に、2 つの日付の間で変数の一部 (例: " ") を選択したいと思います (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

考えられる解決策は 2 つあります。

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 に答える