Мне нужно создать набор данных из нерегулярного списка широт / долгот. Они были собраны в список «пикселей», которые мне нужно распаковать и преобразовать обратно в обычную сетку широты / долготы. Поскольку значения данных не являются полными для каждого пикселя в сетке, мне нужно заполнить отсутствующие значения как np.nan
.
У меня проблемы с созданием xr.Dataset
с неправильным списком широтных точек (пикселей).
Воспроизводимый пример:
Создайте пример того, как выглядят мои данные
Примечание: данные не полные, они имеют форму (99,)
, и поэтому я не могу просто изменить данные, чтобы они соответствовали уникальным широтам / долготам.
import numpy as np
import xarray as xr
unique_latitudes = np.arange(0, 10)
unique_longitudes = np.arange(0, 10)
_ = np.array((np.meshgrid(latitudes, longitudes))).T.reshape(-1, 2)
# we don't have a complete grid of pixels
pixels = _[:99]
latitudes = pixels[:, 0]
longitudes = pixels[:, 1]
pixel_id = [i for i in range(len(pixels))]
# there is one missing datapoint (only 99 pixels so can't simply reshape data)
data = np.random.choice([0,1,2], (pixels.shape[0]))
coords = {'pixel': pixels}
dims = ['pixel']
xr.Dataset({'data': (dims, data)})
Out[]:
<xarray.Dataset>
Dimensions: (pixel: 99)
Dimensions without coordinates: pixel
Data variables:
data (pixel) int64 1 1 2 0 1 0 1 1 0 1 1 2 1 ... 2 2 0 0 1 2 1 2 0 1 1 2
Это как насколько я получил с моими данными. У меня есть массив длиной 99. Но каждое из этих значений соответствует одной широте и одной долготе.
pixels[:5]
Out[]:
array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[0, 4]])
Я хочу получить xr.Dataset
с соответствующим образом помеченными lat
/ lon
координатами
data = np.random.choice([0,1,2], (100)).astype('float')
data = data.reshape(len(unique_latitudes), len(unique_longitudes))
# remember there is one missing data point in the above data
data[np.unravel_index(99, data.shape)] = np.nan
correct_dims = ['lat', 'lon']
correct_coords = {'lat': unique_latitudes, 'lon': unique_longitudes}
correct_ds = xr.Dataset({'data': (correct_dims, data)}, coords=correct_coords)
correct_ds
Out[]:
<xarray.Dataset>
Dimensions: (lat: 10, lon: 10)
Coordinates:
* lat (lat) int64 0 1 2 3 4 5 6 7 8 9
* lon (lon) int64 0 1 2 3 4 5 6 7 8 9
Data variables:
data (lat, lon) float64 0.0 1.0 0.0 1.0 0.0 2.0 ... 2.0 1.0 1.0 2.0 nan