实时 Notebook

您可以在实时会话中运行此 Notebook Binder,或在 Github 上查看

Dask 数组

Dask arrays are blocked numpy arrays

Dask 数组协调许多 Numpy 数组,这些数组被组织成网格内的块。它们支持 Numpy API 的大部分子集。

启动 Dask 客户端以查看仪表盘

启动 Dask 客户端是可选的。它将提供一个仪表盘,有助于深入了解计算过程。

当您在下方创建客户端时,仪表盘的链接将可见。我们建议在屏幕一侧打开仪表盘,另一侧使用 Notebook。这可能需要一些精力来安排窗口,但同时看到两者在学习时非常有用。

[1]:
from dask.distributed import Client, progress
client = Client(processes=False, threads_per_worker=4,
                n_workers=1, memory_limit='2GB')
client
[1]:

客户端

Client-d7513320-0ddf-11ed-9808-000d3a8f7959

连接方法: Cluster 对象 集群类型: distributed.LocalCluster
仪表盘: http://10.1.1.64:8787/status

集群信息

创建随机数组

这创建了一个 10000x10000 的随机数数组,它由许多大小为 1000x1000 的 numpy 数组表示(如果数组不能被整除,则可能更小)。在这种情况下,共有 100 个(10x10)大小为 1000x1000 的 numpy 数组。

[2]:
import dask.array as da
x = da.random.random((10000, 10000), chunks=(1000, 1000))
x
[2]:
数组
字节 762.94 MiB 7.63 MiB
形状 (10000, 10000) (1000, 1000)
计数 100 个任务 100 个块
类型 float64 numpy.ndarray
10000 10000

照常使用 NumPy 语法

[3]:
y = x + x.T
z = y[::2, 5000:].mean(axis=1)
z
[3]:
数组
字节 39.06 kiB 3.91 kiB
形状 (5000,) (500,)
计数 430 个任务 10 个块
类型 float64 numpy.ndarray
5000 1

当您希望将结果作为 NumPy 数组时,调用 .compute()

如果您在上面启动了 Client(),那么您可能想在计算过程中查看状态页面。

[4]:
z.compute()
[4]:
array([1.00226063, 1.01066798, 1.00353892, ..., 1.00020978, 1.00972641,
       0.99609573])

将数据持久化到内存

如果您的数据集有足够的可用 RAM,您可以将数据持久化到内存中。

这使得未来的计算速度更快。

[5]:
y = y.persist()
[6]:
%time y[0, 0].compute()
CPU times: user 1.53 s, sys: 338 ms, total: 1.86 s
Wall time: 1.04 s
[6]:
0.6048766839597692
[7]:
%time y.sum().compute()
CPU times: user 399 ms, sys: 53.2 ms, total: 452 ms
Wall time: 298 ms
[7]:
99992368.08411336

延伸阅读

有关使用 Dask 数组的更深入指南,请参阅dask 教程的 Notebook 03。