gpt4 book ai didi

python - Dask 存储/读取不适合内存的稀疏矩阵

转载 作者:行者123 更新时间:2023-11-28 17:00:38 25 4
gpt4 key购买 nike

我正在使用 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

不幸的是,当尝试将 compute()X 一起使用时,上面的代码会抛出以下错误:无法自动将稀疏数组转换为密集数组。要手动增密,请使用 todense 方法。;但我无法在内存中将稀疏矩阵转换为密集矩阵,因为这会导致错误。

关于如何实现这个的任何想法?

最佳答案

你可以看看下面的问题: https://github.com/dask/dask/issues/4523

基本上,稀疏 有意防止自动转换为密集矩阵。但是,通过设置环境变量 SPARSE_AUTO_DENSIFY=1,您可以覆盖此行为。尽管如此,这只是解决了错误,并没有实现您的主要目标。

您需要做的是将您的文件分成多个 *.npz 稀疏矩阵,以延迟方式使用 sparse 加载它们(参见 dask.delayed)并将它们连接成一个大的稀疏矩阵任务阵列。

我将不得不在不久的将来实现类似的东西。恕我直言,这应该由 Dask 更原生地支持......

关于python - Dask 存储/读取不适合内存的稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com