Ленивая оценка массивов Dask, чтобы избежать временных - PullRequest
0 голосов
/ 10 ноября 2018

Исходя из C ++, я привык к библиотекам, использующим шаблоны выражений, где такие операции с матрицами, как:

D = A*(B+C)

не создавать временных и поэлементных

D(i,j) = A(i,j)*(B(i,j)+C(i,j))

операция выполняется внутри цикла без создания временных матриц для операций в правой части.

Возможно ли это с массивами Dask? Делает ли «Dazk« ленивая оценка »также то же самое, или этот термин просто относится к вычислению по требованию графика операций.

Спасибо.

1 Ответ

0 голосов
/ 11 ноября 2018

По состоянию на 2018-11-11 ответ «да, массив dask избегает полных временных значений в большом масштабе, но нет, он не избегает размещения временных значений на уровне Numpy / blockwise».

Массивы Dask состоят из множества массивов Numpy. А операции с массивом Dask выполняются путем выполнения этих операций над кусками массива Numpy. Когда вы делаете A * (B + C), эта операция происходит с каждым соответствующим набором кусков массива numpy, поскольку numpy будет выполнять операцию, которая включает в себя распределение временных значений.

Однако, поскольку Dask может работать по частям, ему не нужно выделять все части (B + C), прежде чем двигаться дальше.

Вы правы, потому что Даск ленив, у него есть возможность быть умнее, чем Numpy здесь. Вы можете отслеживать прогресс в этом вопросе здесь: https://github.com/dask/dask/issues/4038

...