Dask 数组
目录
实时 Notebook
您可以在实时会话中运行此 Notebook ,或在 Github 上查看。
Dask 数组¶
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 |
集群信息
LocalCluster
eced48ba
仪表盘: http://10.1.1.64:8787/status | 工作节点 1 |
总线程数 4 | 总内存: 1.86 GiB |
状态: 运行中 | 使用进程: False |
调度器信息
调度器
Scheduler-245cbcab-5c52-43bc-bcad-524a2981a5bf
通信: inproc://10.1.1.64/6152/1 | 工作节点 1 |
仪表盘: http://10.1.1.64:8787/status | 总线程数 4 |
启动时间: 刚刚 | 总内存: 1.86 GiB |
工作节点
工作节点:0
通信: inproc://10.1.1.64/6152/4 | 总线程数 4 |
仪表盘: http://10.1.1.64:36121/status | 内存: 1.86 GiB |
Nanny: None | |
本地目录: /home/runner/work/dask-examples/dask-examples/dask-worker-space/worker-94bm6jfp |
创建随机数组¶
这创建了一个 10000x10000 的随机数数组,它由许多大小为 1000x1000 的 numpy 数组表示(如果数组不能被整除,则可能更小)。在这种情况下,共有 100 个(10x10)大小为 1000x1000 的 numpy 数组。
[2]:
import dask.array as da
x = da.random.random((10000, 10000), chunks=(1000, 1000))
x
[2]:
|
照常使用 NumPy 语法
[3]:
y = x + x.T
z = y[::2, 5000:].mean(axis=1)
z
[3]:
|
当您希望将结果作为 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