dask.array.shuffle

dask.array.shuffle

dask.array.shuffle(x, indexer: list[list[int]], axis: int, chunks: Literal['auto'] = 'auto')[源代码]

基于索引器重新排序 Dask 数组的一个维度。

索引器定义了一组位置分组,这些分组最终会出现在同一个块中。单个分组在这个维度上最多只在一个块中,但一个块可能包含多个分组以避免数组的碎片化。

该算法尽可能平衡块大小,以理想地保持块的数量一致或至少可管理。

参数
x: dask 数组

要被洗牌的数组。

索引器: list[list[int]]

决定维度上哪些元素将最终进入同一分块的索引器。多个组可以位于同一分块以避免碎片化,但每个组将最终进入且仅进入一个分块。

轴: int

要进行随机排列的轴。

chunks: “auto”

如果单个组变得太大,如何重新分块的提示。默认情况下,会沿着其他维度均匀地分割块,以保持块大小一致。重新分块的方式确保不需要所有对所有的网络通信,块只会被分割,而不会与其他块合并。

示例

>>> import dask.array as da
>>> import numpy as np
>>> arr = np.array([[1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16]])
>>> x = da.from_array(arr, chunks=(2, 4))

将元素分到不同的组中。

>>> y = x.shuffle([[6, 5, 2], [4, 1], [3, 0, 7]], axis=1)

洗牌算法会将前两个组合并为一个块,以保持块的数量较少。

增加块大小的容差由配置“array.chunk-size-tolerance”控制。默认值为1.25。

>>> y.chunks
((2,), (5, 3))

数组根据给定的位置索引器沿轴1重新排序。

>>> y.compute()
array([[ 7,  6,  3,  5,  2,  4,  1,  8],
       [15, 14, 11, 13, 10, 12,  9, 16]])