堆叠、连接和分块

堆叠、连接和分块

通常我们有许多存储在磁盘上的数组,我们想将它们堆叠在一起,并将其视为一个大型数组。这在地理空间数据中很常见,例如磁盘上有许多 HDF5/NetCDF 文件,每天一个,但我们想要进行跨越多天的操作。

为了解决这个问题,我们使用 da.stackda.concatenateda.block 函数。

堆叠

我们将许多现有 Dask 数组堆叠到一个新数组中,同时创建一个新的维度。

>>> import dask.array as da

>>> arr0 = da.from_array(np.zeros((3, 4)), chunks=(1, 2))
>>> arr1 = da.from_array(np.ones((3, 4)), chunks=(1, 2))

>>> data = [arr0, arr1]

>>> x = da.stack(data, axis=0)
>>> x.shape
(2, 3, 4)

>>> da.stack(data, axis=1).shape
(3, 2, 4)

>>> da.stack(data, axis=-1).shape
(3, 4, 2)

这将创建一个新维度,其长度等于切片的数量

连接

我们将现有数组连接到一个新数组中,沿着现有维度进行扩展

>>> import dask.array as da
>>> import numpy as np

>>> arr0 = da.from_array(np.zeros((3, 4)), chunks=(1, 2))
>>> arr1 = da.from_array(np.ones((3, 4)), chunks=(1, 2))

>>> data = [arr0, arr1]

>>> x = da.concatenate(data, axis=0)
>>> x.shape
(6, 4)

>>> da.concatenate(data, axis=1).shape
(3, 8)

分块

使用 da.block 可以处理更多种类的用例,因为它允许同时在多个维度上应用连接。如果你的分块像瓦片一样铺满空间,例如小方块铺满一个更大的二维平面,这会很有用。

>>> import dask.array as da
>>> import numpy as np

>>> arr0 = da.from_array(np.zeros((3, 4)), chunks=(1, 2))
>>> arr1 = da.from_array(np.ones((3, 4)), chunks=(1, 2))

>>> data = [
...     [arr0, arr1],
...     [arr1, arr0]
... ]

>>> x = da.block(data)
>>> x.shape
(6, 8)