xarray многомерная интерполяция в точку без большой матрицы - PullRequest
0 голосов
/ 14 декабря 2018

Существует ли способ многопараметрической интерполяции в определенные точки без создания огромного массива / цикла?

import xarray as xr
import pandas as pd
xds = xr.tutorial.open_dataset('air_temperature')
xds['airx2'] = xds['air'] * 2
pdf = pd.DataFrame(dict(lat=[45, 60, 75], lon=[225, 320, 315],
                        time=pd.to_datetime(['2013-01-10', '2013-01-12', '2013-01-15'])))

# this seems to be very fast, but creates a large 3x3x3 array
# not ideal if I have 800 rows which will make a final array of 800x800x800
xds.interp(**pdf)

# this doesn't create a 800x800x800 array
# if there's 800 rows in the dataframe, but not vectorized
pd.concat([xds.interp(**row).to_array().to_dataframe('kelvin')
           for i, row in pdf.iterrows()])

Большой массив

enter image description here:

Желаемый результат (если не зациклен):

enter image description here

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы хотите выбрать из нескольких измерений, используя список многомерных точек (вместо того, чтобы настраивать данные с помощью ортогональных индексов), вы хотите выбрать из данных, используя DataArrays с общим индексом:

# create three indexer DataArrays with the DataFrame's index as their coordinate
lat_idx = pdf.lat.to_xarray()
lon_idx = pdf.lon.to_xarray()
time_idx = pdf.time.to_xarray()

# interpolate to these *points* at the lat/lon/time positions given
interped = xds.interp(lat=lat_idx, lon=lon_idx, time=time_idx)

# this can be dumped into pandas:
interped_df = interped.to_dataframe()

Для получения дополнительной информации см. документы по дополнительному индексированию .

...