У меня есть (большой) многомерный xarray Dataarray или Dataset, и я хотел бы выбрать или интерполировать данные по одномерному пути без замедления для циклов или понимания списка (например, есть двумерные данные, определенные на широтах и долготах, и я хотел бы получить данные по маршруту, заданному широтой и долготой):
import xarray as xr
import numpy as np
lats, lons = np.arange(0, 6), np.arange(10, 17)
path_lats, path_lons = np.arange(0.3, 5, 0.5), np.arange(10.6, 15.6, 0.5)
da = xr.DataArray(np.random.rand(len(lats), len(lons)), coords=[lats, lons], dims=['latitude', 'longitude'])
Далее возвращается 2D DataArray, содержащий все комбинации path_lats и path_lons, аналогично циклу for с использованием itertools.product (path_lats, path_lons):
da_path = da.interp(latitude=path_lats, longitude=path_lons)
Для более крупных массивов данных \ наборов данных с более чем двумя измерениями это будет занимать много памяти, поскольку содержит много данных, которые не нужны для этой задачи.
Я хотел бы иметь быструю версию понимания цикла for \ list с использованием zip (path_lats, path_lons), например что-то вроде (неправильный синтаксис здесь)
da_pathZIP = da.interp((latitude, longitude) = (path_lats, path_lons))
, который возвращает 1D массив данных (координата: индекс пути) и, возможно, дополнительные широты и долготы к данным. Полученный Datarray должен содержать следующие данные:
[float(da.interp(latitude=p_lat, longitude=p_lon)) for p_lat, p_lon in zip(path_lats, path_lons)]
Возможно ли это в xarray без использования циклов?