Short:
Возможно ли создать набор данных xarray с 2 различными (временными) координатами, где одна содержит полную информацию о времени для одномерного временного ряда (сохраненного в виде массива dask), а другая -представляет циклический характер данных (повторяющаяся информация о времени)?
Предпосылки и более детальная формулировка:
Предположим, у меня есть эксперимент по измерению, в котором циклический процесс выполняется в течение 1 часа. Один цикл длится около (!) 5 секунд (+/- 0,05 с). Датчики измеряют данные с определенной частотой дискретизации, скажем, 1 кГц.
Что уже отлично работает:
- данные измерений уже инициализированы в одномерном массиве данных на датчик
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)
У меня есть чистая координата даты и времени 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 циклов через 1 час
- циклы не имеют абсолютно одинаковыедлины (но все они около 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 выборок) переменной 1D-данных должен иметь общий массив координат цикла_ времени
Как я могу создатьтакой набор данных xarray?
В качестве сумматора у меня есть
- наборов данных dask channel_1 и channel_2 , каждая длиной около 60 с * 60 мин * 1000 выборок = 360000 значений
- координата xarray exp_time , с такой же длиной, что и один набор данных выше
- координата xarray cycle_time , представляющая один (макс.) цикл с 5050 выборками
- координата xarray циклов , представляющая циклы от 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 DataArrays.
Есть ли у кого-нибудь предложения?
Поможет ли мне здесь MultiIndices ?
Я вынужден (не) укладывать циклы из массива 1D в массив 2D (720x5050)?
Как можноЯ получаю доступ к двумерному массиву как к массиву 1D, встроенному в xarray?
Спасибо большое, очень большое!