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]])