Даск; построить ленивый массив ND - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь построить 5D (ленивый) массив из разницы векторов положения между дискретизированной поверхностью и внутренней частью сферы.Использование петель - это простая задача (просто вложенные 5 уровней в глубину - два для поверхностных позиций и 3 для внутренних положений).Я пытаюсь использовать einsum для большей части реальных вычислений, но у меня возникают реальные проблемы, связанные с построением массива 5D в Dask.

Пример:

DX_ijlmn = SX_ij -VX_lmn
где DX - это разница в x компонентах между поверхностью (SX_ij) и внутренним объемом (VX_lmn).

Будем весьма благодарны за любые подсказки.Предположим, что DX не поместится в памяти (в конце концов).

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Если я правильно понимаю ваш вопрос, у вас есть массивы dask SX и VX с формами ( i , j ) и ( l , m , n ) соответственно, и требуется вычислить своего рода "внешнюю" разницу между ними, в результате чего получается массив DX формы ( i , j , l , m , n )?В этом случае, то, что вы ищете, это

DX = SX[:,:,None,None,None] - VX[None,None,:,:,:]

Это приведет SX и VX к формам ( i , j , 1,1,1) и (1,1, l , m , n ) соответственно, что позволило бывычитание для правильной трансляции по размерам.Получившийся массив dask DX будет иметь форму ( i , j , l , m , n ) и будет ленивым по своей природе (значения не будут фактически рассчитываться до тех пор, пока они не понадобятся).

0 голосов
/ 18 мая 2019

Трудно помочь без дополнительной информации, но вы можете взглянуть на Dask Delayed и документацию об использовании Dask Delayed с Dask Array .Это обычный запасной вариант для сложных проблем.

Возможно, существует более простое решение вашей проблемы, но, к сожалению, я не понимаю ваш вопрос достаточно хорошо, чтобы его решить.

...