将循环时间序列xarray坐标映射到一维时间序列dask数组

简短:

有可能创建一个具有2个不同(时间)坐标的xarray数据集,其中一个保存一维时间序列的完整时间信息(存储为dask数组),另一个保存数据的循环字符(重复的时间信息)?

背景和更详细的表述:

假设我有一个测量实验,其中循环过程执行1小时。 一个周期持续(!)5秒钟(+/- 0.05s) 传感器以一定的采样频率(例如1kHz)测量数据。

已经可以正常工作的东西:

  1. 每个传感器的测量数据已经在1D dask数组中初始化
from datetime import datetime,timedelta
import dask.array as da
import xarray

channel_1 = da.random.random(3600000,chunks=5000)
channel_2 = da.random.random(3600000,chunks=5000)
  1. 我有一个干净的datetime xarray坐标,它表示1小时的实验时间,每秒显示1000个值
base = datetime(2019,11,5,11)
exp_time = xarray.Coordinate("ExpTime_Dim",[base + timedelta(milliseconds=x) for x in range(3600000)])
  1. 我有每个周期开始的索引
    • 所以我有每个周期段(〜5000个样本),一小时后有720个周期
    • 这些循环的长度并不完全相同(但都大约有5000个值,+ /-50个样本)
    • 我创建了一个时间数组(xarray坐标),其最大持续时间为一个周期(5050个样本):
base_cycle = timedelta()
cycle_time = xarray.Coordinate("CycleTime_Dim",[base_cycle + timedelta(milliseconds=x) for x in range(5050)])

cycles = xarray.Coordinate("Cycles_Dim",[x for x in range(1,721)])

(在一个周期内,理想情况下,所有剩余样品(至5050)都要用NaN填充)

实际目标

现在,我想以一种方式创建具有不同坐标的xarray数据集:

  1. 我每个通道都有一个1D数据变量(=传感器测量到的东西)
  2. 每个变量/ DataArray应该共享相同的exp_time坐标数组
  3. 一个循环坐标应从0到720(循环)
  4. 一维数据变量的每个周期段(〜5000个样本)应共享cycle_time坐标数组

如何创建这样的xarray数据集?

作为总结者,我拥有的是

  • dask数据集 channel_1 channel_2 ,每个数据集的长度约为60s * 60min * 1000samples = 360000个值
  • 一个xarray坐标 exp_time ,与上面的一个数据集的长度相同
  • 一个xarray坐标 cycle_time ,代表一个(最大)循环时间,带有5050个样本
  • xarray坐标 cycles ,代表从1到720的周期

基本上是

ds = xarray.Dataset({'channel1': ('ExpTime_Dim',channel_1),'channel2': ('ExpTime_Dim',channel_2)},coords={'Experiment_Time': exp_time,'Cycle_Time': cycle_time,'Cycle': cycles})

但是,当然,上述数据集没有“链接”或映射到1D DataArray的某些段。

有人有建议吗?

多指标会在这里帮助我吗?
我被迫将(循环)从一维阵列到二维阵列(720x5050)的堆叠?
如何在xarray中以本地方式将2D数组作为1D数组访问?

非常非常感谢您!

businiao555 回答:将循环时间序列xarray坐标映射到一维时间序列dask数组

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3159540.html

大家都在问