首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Dask存储/读取不适合内存的稀疏矩阵

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

Stack Overflow用户
提问于 2019-02-20 14:15:52
回答 1查看 1.4K关注 0票数 5

我正在使用sparse构造、存储和读取一个大型稀疏矩阵。我想使用Dask数组来使用它的阻塞算法特性。

这是我正在尝试做的事情的一个简化版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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一起使用时,上面的代码抛出了以下错误:Cannot convert a sparse array to dense automatically. To manually densify, use the todense method.;但我不能将稀疏矩阵转换为内存中的密集矩阵,因为这将导致错误。

对于如何实现这一点有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 17:30:00

您可以查看以下问题:https://github.com/dask/dask/issues/4523

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

您需要做的是将文件拆分为多个*.npz稀疏矩阵,以延迟的方式使用sparse加载这些矩阵(请参阅dask.delayed),然后将这些矩阵连接成一个大型稀疏Dask数组。

在不久的将来,我将不得不实现类似的东西。我想这应该是Dask原生支持的.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54788436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文