dask.array.reshape_blockwise
dask.array.reshape_blockwise¶
- dask.array.reshape_blockwise(x: dask.array.core.Array, shape: int | tuple[int, ...], chunks: tuple[tuple[int, ...], ...] | None = None) dask.array.core.Array [源代码]¶
块状重塑为新形状。
Dask 中的常规重塑操作在数组中保留了 C 顺序,这需要对大多数重塑操作进行重新分块,从而使得计算相对昂贵。
块状重塑将每个块重塑为新形状并将结果连接起来。这是一个简单的块状计算,但返回的结果顺序与NumPy不同。这对于后续不依赖顺序的操作是一个很好的解决方案。
- 参数
- x: 数组
要重塑的输入数组。
- 形状int 或 int 的元组
新形状应与原始形状兼容。如果是一个整数,那么结果将是一个该长度的1-D数组。一个形状维度可以是-1。在这种情况下,该值是从数组的长度和剩余维度推断出来的。
- chunks: int 元组, 默认 None
输出数组中每个块的块大小。Dask 会将每个维度中的块扩展为数组中每个块的块的叉积。
如果给出了chunks并且维度的数量减少,则会引发错误。
备注
如果维度数量增加,则需要此信息。在这种情况下,Dask 无法推断输出块。如果维度数量减少,则忽略此关键字。
注释
这是
np.reshape
函数的并行版本,具有以下限制:它返回元素的顺序与 NumPy 不同
它只允许像
(1, 2, 3, 4) -> (1, 6, 4)
这样的重塑操作。
示例
>>> import dask.array as da >>> import numpy as np >>> x = da.from_array(np.arange(0, 27).reshape(3, 3, 3), chunks=(3, 2, (2, 1))) >>> result = reshape_blockwise(x, (3, 9)) >>> result.chunks ((3,), (4, 2, 2, 1))
生成的块是自动计算的,以匹配新的形状。
>>> result.compute() array([[ 0, 1, 3, 4, 2, 5, 6, 7, 8], [ 9, 10, 12, 13, 11, 14, 15, 16, 17], [18, 19, 21, 22, 20, 23, 24, 25, 26]])
>>> result = reshape_blockwise(result, (3, 3, 3), chunks=x.chunks) >>> result.chunks ((3,), (2, 1), (2, 1))
生成的块取自输入。像这样将重塑操作链接在一起会恢复之前减少维数的重塑操作。
>>> result.compute() array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]])