dask.array.rechunk

dask.array.rechunk

dask.array.rechunk(x, chunks='auto', threshold=None, block_size_limit=None, balance=False, method=None)[源代码]

将 dask 数组 x 中的块转换为新的块。

参数
x: dask 数组

要重新分块的数组。

chunks: int, tuple, dict 或 str, 可选

要创建的新块维度。-1 表示相应维度的全尺寸。默认是 “auto”,它会自动确定块大小。

阈值: int, 可选

在我们不介意引入中间步骤的图增长因子下。

block_size_limit: int, 可选

我们希望生成的最大块大小(以字节为单位)默认设置为配置值 array.chunk-size

平衡bool, 默认 False

如果为真,尝试使每个块的大小相同。

这意味着 balance=True 将移除任何小的剩余块,因此使用 x.rechunk(chunks=len(x) // N, balance=True) 几乎肯定会得到 N 个块。

方法: {‘任务’, ‘点对点’}, 可选.

要使用的重新分块方法。

示例

>>> import dask.array as da
>>> x = da.ones((1000, 1000), chunks=(100, 100))

使用元组指定统一的块大小

>>> y = x.rechunk((1000, 10))

或者只用字典对特定维度进行分块

>>> y = x.rechunk({0: 1000})

使用值 -1 来指定你希望在一个维度上分成一个块,或者使用值 "auto" 来指定 dask 可以自由地重新分块一个维度以达到均匀块大小的块。

>>> y = x.rechunk({0: -1, 1: 'auto'}, block_size_limit=1e8)

如果块大小不能整除维度,那么 rechunk 会将任何不均匀的部分留在最后一个块中。

>>> x.rechunk(chunks=(400, -1)).chunks
((400, 400, 200), (1000,))

然而,如果你想要更平衡的块,并且不介意Dask为你选择不同的块大小,那么你可以使用 balance=True 选项。

>>> x.rechunk(chunks=(400, -1), balance=True).chunks
((500, 500), (1000,))