首页 > 解决方案 > 在 dask 数组的切片上运行函数

问题描述

我一直在试图弄清楚如何在 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: Item assignment with not supported 有没有一种方法可以解决这个问题来执行此操作?谢谢你,

标签: python-3.xdaskdask-delayed

解决方案


对于 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

)


推荐阅读