У меня есть этот набор данных::
Код: Выделить всё
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)
Так что я не знаю если мне следует сохранить координаты следующим образом:
Код: Выделить всё
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
}
)
Код: Выделить всё
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