Я пытаюсь нормализовать массив dask с уменьшением самого себя (например, b = a / a.sum()
с a
и b
, являющимися массивами dask).Вычисление этого нормализованного массива сначала вычислит все необходимое, чтобы узнать исходный массив, и только затем вычислит деления и, следовательно, попадет на диск, если памяти недостаточно.
Пример кода:
from dask.distributed import Client
from dask import arry as da
# Create 1000 MB array full of 1's of with chunks of 50MB
a = da.ones(shape=(1/8 * 1000e6, 1), chunks=(1/8 * 50e6, 1))
# Create normalized array with sum = 1
b = a / a.sum()
# Create cluster to small for all of a or b at once
client = Client(n_workers=1, threads_per_worker=1, memory_limit=500e6)
# Compute sum of b (Spills to disk)
print(b.sum().compute())
Есть ли что-то вроде следующего?
b = a / same_as_a_but_different_tasks.sum()