简短:
有可能创建一个具有2个不同(时间)坐标的xarray数据集,其中一个保存一维时间序列的完整时间信息(存储为dask数组),另一个保存数据的循环字符(重复的时间信息)?
背景和更详细的表述:
假设我有一个测量实验,其中循环过程执行1小时。 一个周期持续(!)5秒钟(+/- 0.05s) 传感器以一定的采样频率(例如1kHz)测量数据。
已经可以正常工作的东西:
- 每个传感器的测量数据已经在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)
- 我有一个干净的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)])
- 我有每个周期开始的索引
- 所以我有每个周期段(〜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数据集:
- 我每个通道都有一个1D数据变量(=传感器测量到的东西)
- 每个变量/ DataArray应该共享相同的exp_time坐标数组
- 一个循环坐标应从0到720(循环)
- 一维数据变量的每个周期段(〜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数组访问?
非常非常感谢您!