运行 dask 数组切片上的函数
Running a function on a slice of a dask array
我一直在努力弄清楚如何在 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:不支持的项目分配
有没有办法解决这个问题来做这个手术?
谢谢,
对于 Dask,突变不是正常的工作流程:您需要创建输入和 return 新值的函数,例如
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
)
我一直在努力弄清楚如何在 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:不支持的项目分配 有没有办法解决这个问题来做这个手术? 谢谢,
对于 Dask,突变不是正常的工作流程:您需要创建输入和 return 新值的函数,例如
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
)