堆叠、拼接和分块
目录
堆叠、拼接和分块¶
通常我们磁盘上存储着许多数组,我们希望将它们堆叠在一起并视为一个大数组。这在地理空间数据中很常见,例如磁盘上可能有许多 HDF5/NetCDF 文件,每天一个,但我们需要进行跨多天的操作。
为了解决这个问题,我们使用函数 da.stack
、da.concatenate
和 da.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)