Создание композитов из данных наблюдений с пробелами в данных во времениPython

Программы на Python
Ответить
Гость
 Создание композитов из данных наблюдений с пробелами в данных во времени

Сообщение Гость »


РЕДАКТИРОВАТЬ ДЛЯ ЯСНОСТИ: Используя массивы numpy, есть ли способ учесть пропущенные временные шаги в моих данных и/или создать массив Nans (len, len), а затем перебрать мои данные и заполнить массив Nans с данными, соответствующими правильному времени.

Мне нужно построить составные показатели времени и высоты на основе термодинамических данных. Эти извлечения представляют собой усредненные профили за десять минут, но иногда возникают пробелы в данных, которые мне нужно учитывать и которые НЕ имеют временных меток/Nans. Все высоты одинаковы, так что это не проблема.

Я пытаюсь создать четырехчасовую композицию, посвященную проходу с морским бризом. Так что для каждого случая это время разное, но композит должен составлять 4 часа. Поскольку времена разные, я не могу просто создать идеальную переменную времени (скажем, 18-23UTC), а вместо этого мне нужна переменная относительного времени (от -2 часов до +2 часов).

В настоящее время у меня возникают проблемы с обработкой пропавших данных. В настоящее время данные обстоят так: если данные отсутствуют, то они просто перескакивают во времени (например, данные 16-18, а затем 19-24).

Я считаю, что мне нужно создать фиктивную переменную, пройтись по данным и заполнить фиктивную переменную данными с правильным индексом времени, но я не уверен, как это сделать, учитывая, что время будет варьироваться в зависимости от день.

Пример файла данных можно найти по адресу: https://data.nssl.noaa.gov/thredds/cata ... talog.html< /п> Ниже приведен фрагмент кода, который включает чтение файлов/данных, создает время начала/окончания, находит индексы времени начала/окончания и извлекает соответствующие данные.

Однако, если разрыв данных возникает в момент начала/окончания, это становится проблемой.
""" Тестирование композитов """ из datetime импорта datetime, date, timedelta из siphon.catalog импортировать TDSCatalog импорт cmocean импортировать matplotlib.dates как mdates импортировать matplotlib.pyplot как plt импортировать numpy как np из набора данных импорта netCDF4 импортировать xarray как xr импортировать глобус def find_closest(A, цель): """ Эта функция находит индекс ближайшего значения к целевое значение с указанным массивом. Источник: Джереми Гиббс (NOAA-NSSL). Аргументы: A (массив): данные для поиска ближайшего значения. цель (float): искомое значение. Возврат: idx (int): индекс A со значением, наиболее близким к целевому. """ idx = A.searchsorted(target) # A должен быть отсортирован idx = np.clip(idx, 1, len(A)-1) слева = A[idx-1] вправо = A[idx] idx -= цель - слева < справа - цель вернуть идентификатор def decimal_hours_to_datetime(decimal_hours, лет, месяцев, дней): datetime_list = [] для меня часы в перечислении (decimal_hours): start_time = datetime(год=год, месяц=месяцы, день=дни) # Вычисляем дельту времени, соответствующую десятичным часам timedelta_hours = timedelta(часы=часы) # Добавьте временную дельту ко времени начала, чтобы получить объект datetime datetime_obj = start_time + timedelta_hours datetime_list.append(datetime_obj) вернуть список_даты и времени для j в диапазоне (0, len(dt_c11)): если j == 5: # Откройте набор данных nc_thermo1 = Набор данных (input_files_c1[j]) nc_thermo2 = Набор данных (input_files_c1[j+1]) t_1 = nc_thermo1['base_time'][:] + nc_thermo1['time_offset'][:] t_2 = nc_thermo2['base_time'][:] + nc_thermo2['time_offset'][:] time_1 = np.append(t_1, t_2) час = np.array([datetime.utcfromtimestamp(e) для e в time_1]) h_1 = nc_thermo1.variables['высота'][:] h_2 = nc_thermo2.variables['высота'][:] высота = h_1 temp1 = nc_thermo1.variables['theta'][:,:] temp2 = nc_thermo2.variables['theta'][:,:] temp = np.append(temp1, temp2, ось = 0) nc_thermo1.close() nc_thermo2.close() # Создайте время начала и окончания, чтобы мы могли индексировать переменные t_delta = дельта времени (часы = 2) start_time = sb_times_c1 - t_delta конечное_время = sb_times_c1 + t_delta start_idx_thermo = np.argmin(np.abs(час - start_time)) end_idx_thermo = np.argmin(np.abs(час - end_time)) # Извлекаем данные, соответствующие индексам temp = temp[start_idx_thermo:end_idx_thermo, :] # Создать идеальную временную ось/окно window_time = час[start_idx_thermo:end_idx_thermo] rel_time = window_time - sb_times_c1 # Преобразование относительного временного окна в целые числа (секунды) для я в диапазоне (0, len(rel_time)): rel_time = rel_time.total_секунды()`
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»