为什么 map_block 函数 运行 两次?

Why is map_block function run twice?

我有一个问题,为什么 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 函数必须以某种方式 运行 之前真正在这些块上执行一次,对吗?

我有 python v2.7 和 dask v0.13.0。

如果您没有为 map-blocks 调用提供数据类型,那么它会在一个很小的样本数据集(因此是单例形状)上尝试 运行 您的函数。如果您知道,可以通过显式传递 dtype 来避免这种情况。

y = d.map_blocks(derivative, dtype=d.dtype)