合并两个时间序列数据数组

问题描述

我正在处理 2 个具有时间、纬度和经度维度的数据数组。

Data1 看起来像:

print (data1)
 <xarray.DataArray (lon: 20,lat: 40,time: 2880)>
  array([[[6.02970212,4.49268718,2.47512044,...,7.09662201,0.34438006,0.664115  ]]])
 Coordinates:
     * lon      (lon) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
     * lat      (lat) int32 0 1 2 3 4 5 6 7 8 9 ... 30 31 32 33 34 35 36 37 38 39
     * time     (time) datetime64[ns] 2017-06-01 ... 2017-07-30T23:30:00

Data2 看起来像:

print (data2)
<xarray.DataArray (lon: 20,time: 2880)>
array([[[1.60607837,3.07589422,6.26158588,6.95746878,0.51368952,1.45280591]]])
 Coordinates:
     * lon      (lon) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
     * lat      (lat) int32 0 1 2 3 4 5 6 7 8 9 ... 30 31 32 33 34 35 36 37 38 39
     * time     (time) datetime64[ns] 2017-08-01 ... 2017-09-29T23:30:00

两个数据数组中的“lon”和“lat”维度相似。 “时间”维度的情况并非如此。 我想创建一个结合 data1 和 data2 的新数据数组。所以新的数据数组 (data3) 将如下所示:

print(data3)
<xarray.DataArray (lon: 20,time: 5808)>
array([[[4.82000138,8.13537618,2.39793625,2.03778308,4.13311001,5.57075556]]])
 Coordinates:
    * lon      (lon) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    * lat      (lat) int32 0 1 2 3 4 5 6 7 8 9 ... 30 31 32 33 34 35 36 37 38 39
    * time     (time) datetime64[ns] 2017-06-01 ... 2017-09-29T23:30:00

有这样做的想法吗?

这是重新生成data1和data2的代码

from datetime import timedelta

import xarray as xr
import numpy as np

precipitation = 10 * np.random.rand(20,40,2880)
lon = range(20)
lat = range(40)
time1 = np.arange('2017-06-01','2017-07-31',timedelta(minutes=30),dtype='datetime64[ns]')
time2 = np.arange('2017-08-01','2017-09-30',dtype='datetime64[ns]')
data1 =xr.DataArray(
data=precipitation,dims=["lon","lat","time"],coords=[lon,lat,time1]          
        )
print (data1)

data2 =xr.DataArray(
data=precipitation,time2]          
        )
print (data2)

解决方法

如果你想沿着时间维度堆叠你的数据数组,你可以简单地做

data3 = xr.concat([data1,data2],dim="time")
,

这里是您需要的代码段:

time3 = np.concatenate((time1,time2),dtype='datetime64[ns]')
data3 = xr.DataArray(
    data=10 * np.random.rand(20,40,len(time3)),dims=["lon","lat","time"],coords=[lon,lat,time3]          
)
print (data3)

这是我的输出:

<xarray.DataArray (lon: 20,lat: 40,time: 5760)>
Coordinates:
  * lon      (lon) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  * lat      (lat) int32 0 1 2 3 4 5 6 7 8 9 ... 30 31 32 33 34 35 36 37 38 39
  * time     (time) datetime64[ns] 2017-06-01 ... 2017-09-29T23:30:00