实时笔记本

你可以在 live session Binder 中运行此笔记本,或查看 on Github

奇异值分解

本笔记本介绍了 da.linalg.svd 算法,用于奇异值分解。

启动 Dask 客户端以使用仪表板

启动 Dask 客户端是可选的。它将提供一个仪表板,这对于深入了解计算非常有用。

当你在下方创建客户端后,仪表板的链接将会变得可见。我们建议在使用笔记本的另一侧屏幕上打开它。虽然安排窗口可能需要一些努力,但在学习时同时看到两者非常有用。

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

计算高瘦矩阵的奇异值分解

对于许多应用来说,提供的矩阵有比列更多的行。在这种情况下,可以使用专门的算法。

[ ]:
import dask.array as da

X = da.random.random((200000, 100), chunks=(10000, 100)).persist()
[ ]:
import dask

u, s, v = da.linalg.svd(X)
dask.visualize(u, s, v)
[ ]:
v.compute()

使用近似算法计算一般非瘦矩阵的SVD

当列中也有很多块时,我们使用一种近似的随机算法来仅收集少数奇异值和向量。

[ ]:
import dask.array as da

X = da.random.random((10000, 10000), chunks=(2000, 2000)).persist()
[ ]:
import dask

u, s, v = da.linalg.svd_compressed(X, k=5)
dask.visualize(u, s, v)
[ ]:
v.compute()