Запуск функции на фрагменте массива dask - PullRequest
0 голосов
/ 05 сентября 2018

Я пытался выяснить, как выполнять функции на кусках массива dask. Например, если я создаю следующий массив dask:

import numpy as np
import dask.array as da
x = da.random.normal(10, 0.1, size=(200, 4),chunks=(100, 100)) 

и определите функцию:

#test function
def test(x,y,z=4):
    return x*y+z, z*y

выполняет

a,b = test(x[:,0],x[:,1])
a.compute()
b.compute()

работает как положено, но если я попытаюсь присвоить эти результаты обратно x, функция завершится ошибкой:

x[:,0],x[:,1] = test(x[:,0],x[:,1])

выдача NotImplementedError: назначение элемента с не поддерживается Есть ли способ, которым я могу обойти это, чтобы сделать эту операцию? Спасибо,

1 Ответ

0 голосов
/ 07 сентября 2018

Для Dask мутация не является нормальным рабочим процессом: вам нужно создать функции, которые будут вводить и возвращать новые значения, например,

def test(x,y,z=4):
    return x*y+z, z*y

a, b = test(x[:, 0], x[:, 1])
out = da.hstack([a.reshape(200, 1), b.reshape(200, 1), 
                 x[:, 2].reshape(200, 1), x[:, 3].reshape(200, 1)])

(или

out = da.vstack([a, b, x[:, 2], x[:, 3]]).T

)

...