Как интерполировать многомерный массив DataArray xarray?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как интерполировать многомерный массив DataArray xarray?

Сообщение Anonymous »

Я новичок в использовании библиотеки xarray, и у меня есть некоторые сомнения/вопросы.
У меня есть этот набор данных::

Код: Выделить всё

ds
 Size: 2GB
Dimensions:    (Latitude: 364, Longitude: 246, Lon_u: 247, Lat_v: 364,
Time: 1087)
Coordinates:
Longitude  (Latitude, Longitude)
Latitude   (Latitude, Longitude)
Lon_u      (Latitude, Lon_u)
Lat_v      (Lat_v, Longitude)
* Time       (Time) datetime64[ns]
Data variables:
Lat_u      (Latitude, Lon_u)
Lon_v      (Lat_v, Longitude)
uSurf      (Time, Latitude, Lon_u)
vSurf      (Time, Lat_v, Longitude)
< /code>
Я хочу интерполировать данные (lat_v> latitude и lon_u> долготу). Результат должен быть похож на что-то вроде этого: < /p>
ds
 Size: 2GB
Dimensions:    (Latitude: 364, Longitude: 246, Time: 1087)
Coordinates:
Longitude  (Longitude)
Latitude   (Latitude)
* Time       (Time) datetime64[ns]
Data variables:
uSurf      (Time, Latitude, Longitude)
vSurf      (Time, Latitude, Longitude)
Или на самом деле я не знаю, имеет ли смысл конвертировать 2D-координаты в 1D. Я читал, что если это 2D-координаты, то это логические координаты (долгота, широта), работающие как нерегулярная матрица. Но я думаю, что приведенный выше пример также является нерегулярной матрицей только потому, что размеры разные: {Широта: 364, Долгота: 246.
Так что я не знаю если мне следует сохранить координаты следующим образом:

Код: Выделить всё

ds
 Size: 2GB
Dimensions:    (Latitude: 364, Longitude: 246, Lon_u: 247, Lat_v: 364,
Time: 1087)
Coordinates:
Longitude  (Latitude, Longitude)
Latitude   (Latitude, Longitude)
* Time       (Time) datetime64[ns]
Data variables:
uSurf      (Time, Latitude, Longitude)
vSurf      (Time, Latitude, Longitude)
< /code>
Я не понимаю этого нотации. Потому что я нахожу это рекурсивным. Представьте, что я хочу получить все возможные значения широты: я могу сделать это: < /p>
ds.Latitude.values[:, 0]
< /code>
Но широта также является координатой самой широты. Так что я мог бы сделать что-то подобное < /p>
ds.Latitude.Latitude.Latitude.Latitude.values[:, 0]
Это нормальное поведение? Или что-то не так с моим набором данных, и мне нужно его сгладить?
Я пробовал этот код:

Код: Выделить всё

interp_coords = {'Latitude': ds.Latitude.values[:, 0], 'Longitude': ds.Longitude.values[0, :]}

uSurf_interp = ds.uSurf.interp(
Latitude=interp_coords['Latitude'],
Lon_u=interp_coords['Longitude'],
method='linear'
)

vSurf_interp = ds.vSurf.interp(
Lat_v=interp_coords['Latitude'],
Longitude=interp_coords['Longitude'],
method='linear'
)

ds_interp = xr.Dataset(
{
'uSurf': uSurf_interp,
'vSurf': vSurf_interp
},
coords={
'Latitude': interp_coords['Latitude'],
'Longitude': interp_coords['Longitude'],
'Time': ds.Time
}
)
Я получаю эту ошибку в первой Interp Инструкция:

Код: Выделить всё

ValueError: Input DataArray is not 1-D.
< /code>
As InterP принимает только 1-D координаты. Поэтому мне нужно сгладить координаты. Это одна вещь, которую я хотел избежать. < /P>
Я прочитал документацию. Но я не могу найти решение: < /p>

 Многомерная интерполяция < /li>
 Работа с многомерными координатами < /li>
< /ul>
Я нашел эту диаграмму довольно илустративной. Но для 1D координат 
 
 обновление < /h1>
Я стараюсь сделать это вручную с помощью np.meshgrid и scipy.interpolate.griddata. Кроме того, я пытаюсь объединить их с xarray.apply_ufunc 


Подробнее здесь: https://stackoverflow.com/questions/793 ... -dataarray
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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