Существовал как минимум еще один вопрос относительно введения новых измерений в выходные данные xarray.apply_ufunc; У меня есть две проблемы с этим ответом: во-первых, мне кажется, что ответ ускользает от основной проблемы, а во-вторых, практически нет объяснений (неправильных) концепций, которые приводят к проблеме.
Давайте рассмотрим этот (абстрактный и неработающий) пример:
import numpy as np
import xarray as xr
a1 = np.array([[11,12,13,14],[15,16,17,18],[19,110,111,112],[113,114,115,116]], dtype=np.int16)
a2 = np.array([[21,22,23,24],[25,26,27,28],[29,210,211,212],[213,214,215,216]], dtype=np.int16)
ds = xr.Dataset(
data_vars= {
"d1": (("y", "x"), a1),
"d2": (("y", "x"), a2)
}
).chunk({"y":2,"x":2})
def stackuf(xa1, xa2):
return np.stack((xa1, xa2), axis=-1)
out = xr.apply_ufunc(
stackuf,
ds.d1,
ds.d2,
input_core_dims=[[],[]], # what is supposed to be here?
output_core_dims=[[]], # and what is supposed to be here?
output_sizes=dict(ds.sizes, **{"xy":2}), # and what is needed there?
dask="parallelized",
vectorize=False,
output_dtypes=[np.int16],
)
out.compute()
Что он должен делать: Из двух переменных с двумя измерениями (y, x) создать новую переменную с тремя измерениями (y, x, xy)
Я подозреваю, что аргументы input_core_dims, output_core_dims, output_sizes являются ключевыми аргументами, чтобы это работало. Но я не совсем понимаю их семантику.
Пожалуйста, не надо:
просто заставить код работать
предлагать обходные пути, позволяющие избежать необходимости вводить новые измерения
вместо этого точно объяснять, что нужно понимать в отношении этой и подобных проблем.
Существовал как минимум еще один вопрос относительно введения новых измерений в выходные данные xarray.apply_ufunc; У меня есть две проблемы с этим ответом: во-первых, мне кажется, что ответ ускользает от основной проблемы, а во-вторых, практически нет объяснений (неправильных) концепций, которые приводят к проблеме. Давайте рассмотрим этот (абстрактный и неработающий) пример: [code]import numpy as np import xarray as xr
out = xr.apply_ufunc( stackuf, ds.d1, ds.d2, input_core_dims=[[],[]], # what is supposed to be here? output_core_dims=[[]], # and what is supposed to be here? output_sizes=dict(ds.sizes, **{"xy":2}), # and what is needed there? dask="parallelized", vectorize=False, output_dtypes=[np.int16], ) out.compute() [/code] Что он должен делать: Из двух переменных с двумя измерениями (y, x) создать новую переменную с тремя измерениями (y, x, xy) Я подозреваю, что аргументы input_core_dims, output_core_dims, output_sizes являются ключевыми аргументами, чтобы это работало. [b]Но я не совсем понимаю их семантику.[/b] Пожалуйста, не надо: [list] [*]просто заставить код работать [*]предлагать обходные пути, позволяющие избежать необходимости вводить новые измерения [/list] вместо этого точно объяснять, что нужно понимать в отношении этой и подобных проблем.