Правда задержанных объектов не поддерживается - PullRequest
0 голосов
/ 04 октября 2018

Я использую dask для задержки вычислений некоторых функций, которые возвращают ряды в моей кодовой базе.Кажется, что большинство операций пока работают так, как и ожидалось - кроме моего использования np.average.

У меня есть функция, возвращающая pd.Series, по которой я затем хочу вычислить средневзвешенное значение.

Ниже приведена не-даска и даска-версия:

import dask
import numpy as np
import pandas as pd

s = pd.Series([1,2,3])
a = np.average(s, weights=s)
print(a)

ds = dask.delayed(lambda: s)()
a = np.average(ds, weights=ds)
print(a.compute())

Вызов np.average вызывает TypeError: Truth of Delayed objects is not supported.

Неуверен, какая часть моего использования здесь неправильная.

1 Ответ

0 голосов
/ 04 октября 2018

Проблема в том, что вы вызываете функцию Numpy np.average для объекта с задержкой dask.Функция Numpy понятия не имеет, что делать с объектом с задержкой Dask, поэтому возникает ошибка.Решением является также задержка функции numpy.

Вы можете сделать следующее:

a = dask.delayed(np.average)(ds, weights=ds)
a.compute()

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

...