По состоянию на 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