Die*_*llo 5 python numpy sparse-matrix dask
我正在使用sparse来构造、存储和读取大型稀疏矩阵。我想使用Dask数组来使用其阻塞算法功能。
这是我正在尝试做的简化版本:
file_path = './{}'.format('myfile.npz')
if os.path.isfile(file_path):
# Load file with sparse matrix
X_sparse = sparse.load_npz(file_path)
else:
# All matrix elements are initially equal to 0
coords, data = [], []
X_sparse = sparse.COO(coords, data, shape=(88506, 1440000))
# Create file for later retrieval
sparse.save_npz(file_path, X_sparse)
# Create Dask array from matrix to allow usage of blocked algorithms
X = da.from_array(X_sparse, chunks='auto').map_blocks(sparse.COO)
return X
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码抛出试图使用时,下面的错误compute()有X:Cannot convert a sparse array to dense automatically. To manually densify, use the todense method.; 但我无法将稀疏矩阵转换为内存中的密集矩阵,因为它会导致错误。
关于如何实现这一点的任何想法?
您可以查看以下问题: https ://github.com/dask/dask/issues/4523
基本上,sparse有意阻止自动转换为密集矩阵。但是,通过设置环境变量,SPARSE_AUTO_DENSIFY=1您可以覆盖此行为。然而,这只是解决了错误,但并没有实现你的主要目标。
您需要做的是将文件拆分为多个 *.npz 稀疏矩阵,以sparse延迟方式加载它们(请参阅 dask.delayed)并将它们连接到一个大型稀疏 Dask 数组中。
我将不得不在不久的将来实施类似的事情。恕我直言,Dask 应该更原生地支持这...
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |