我有一个问题,为什么map_block
函数运行两次?当我在下面运行一个例子时:
import dask.array as da
import numpy as np
def derivative(x):
print(x.shape)
return x - np.roll(x, 1)
x = np.array([1, 1, 2, 3, 3, 3, 2, 1, 1])
d = da.from_array(x, chunks = 5)
y = d.map_blocks(derivative)
res = y.compute()
我获得了这个输出:
(1L,)
(5L,)
(4L,)
由于我的块是((5,4),),我认为derivative
函数必须以某种方式运行一次才真正在这些块上执行,我是对的吗?
我在v0.13.0上有python v2.7和dask
。
答案 0 :(得分:1)
如果你没有为map-blocks调用提供dtype,那么它将尝试在一个很小的样本数据集上运行你的函数(因此是单例形状)。如果您知道,可以通过明确传递dtype来避免这种情况。
y = d.map_blocks(derivative, dtype=d.dtype)