Добавить массив NumPy как переменную в набор данных Xarray - PullRequest
0 голосов
/ 05 июля 2018

Это похоже на очень простую операцию, но я не могу понять, как это сделать, используя документацию xarray.

У меня есть набор данных xarray:

dss
<xarray.DataArray (y: 1000, x: 1334)>
dask.array<shape=(1000, 1334), dtype=uint8, chunksize=(222, 58)>
Coordinates:
    band     int32 1
  * y        (y) float64 2.218e+06 2.218e+06 2.218e+06 2.218e+06 2.218e+06 ...
  * x        (x) float64 1.891e+06 1.891e+06 1.891e+06 1.891e+06 1.891e+06 ...
Attributes:
    transform:   (30.0, 0.0, -2493045.0, 0.0, -30.0, 3310005.0, 0.0, 0.0, 1.0)
    crs:         +ellps=GRS80 +lat_0=23 +lat_1=29.5 +lat_2=45.5 +lon_0=-96 +n...
    res:         (30.0, 30.0)
    is_tiled:    1
    nodatavals:  (nan,)

и массив с правильными размерами:

print(np.shape(nmap))
(1000, 1334)
nmap
array([[ 0.15,  0.1 ,  0.15, ...,  0.05,  0.05,  0.02],
       [ 0.15,  0.1 ,  0.05, ...,  0.05,  0.05,  0.05],
       [ 0.1 ,  0.15,  0.15, ...,  0.05,  0.05,  0.02],
       ..., 
       [ 0.02,  0.02,  0.02, ...,  0.02,  0.02,  0.02],
       [ 0.02,  0.09,  0.09, ...,  0.02,  0.02,  0.02],
       [ 0.02,  0.09,  0.09, ...,  0.02,  0.02,  0.02]])

Я хотел бы добавить массив в DataSet. Моя конечная цель - выполнить пространственную интерполяцию, используя x и y, чтобы извлечь интерполированные значения nmap на новой сетке.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Предположим, вы хотите добавить данные о температуре в набор данных:

# Take the following dataset as an example
data_set=xr.Dataset( coords={'lon': (['x', 'y'], lon),
                    'lat': (['x', 'y'], lat),
                    'time': pd.date_range('2014-09-06', periods=3)})
temp=np.array([[25, 24, 20, -12],[23, 21, 22, -11]])
data_set["Temperature"]=(['x', 'y', 'time'],  temp)
0 голосов
/ 06 июля 2018

Хотите создать набор данных, который содержит ваш массив nmap? Или вы хотите сделать арифметику dss + nmap?

Для первого случая сначала нужно сделать Dataset из dss и присвоить ему nmap, поскольку ваш dss не Dataset, а DataArray.

Чтобы сделать Dataset из DataArray s, вы можете передать словарь, сопоставляющий имя массива, с объектом DataArray. Если ваш массив - это не DataArray, а пустой массив или массив dask, вам нужен кортеж (размеры, массив, [атрибут]).

ds = xr.Dataset({'dss': dss, 'nmap': (('y', 'x'), nmap)})

Или другой способ сделать то же самое -

ds = xr.Dataset({})
ds['dss'] = ds
ds['nmap'] = (('y', 'x'), nmap)

Для последнего случая просто сделайте

dss + nmap
...