Python Dask存储/读取一个不';我记不起来了

Python Dask存储/读取一个不';我记不起来了,python,numpy,sparse-matrix,dask,Python,Numpy,Sparse Matrix,Dask,我用它来构造、存储和读取一个大的稀疏矩阵。我想使用数组来使用它的阻塞算法特性 下面是我尝试做的一个简化版本: file_path='./{}.format('myfile.npz')) 如果os.path.isfile(文件路径): #用稀疏矩阵加载文件 X_sparse=sparse.load_npz(文件路径) 其他: #所有矩阵元素最初都等于0 坐标,数据=[],[] X_sparse=sparse.COO(坐标,数据,形状=(885061440000)) #创建文件以供以后检索 save

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

下面是我尝试做的一个简化版本:

file_path='./{}.format('myfile.npz'))
如果os.path.isfile(文件路径):
#用稀疏矩阵加载文件
X_sparse=sparse.load_npz(文件路径)
其他:
#所有矩阵元素最初都等于0
坐标,数据=[],[]
X_sparse=sparse.COO(坐标,数据,形状=(885061440000))
#创建文件以供以后检索
save_npz(文件路径,X_稀疏)
#从矩阵创建Dask数组以允许使用阻塞算法
X=da.from_数组(X_sparse,chunks='auto').map_块(sparse.COO)
返回X
不幸的是,上面的代码在尝试将
compute()
X
一起使用时引发以下错误:
无法自动将稀疏数组转换为密集数组。要手动加密,请使用todense方法。
;但是我不能在内存中将稀疏矩阵转换为稠密矩阵,因为这将导致错误


关于如何做到这一点,您有什么想法吗?

您可以看看以下问题:

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

您需要做的是将文件拆分为多个*.npz稀疏矩阵,以延迟方式使用
sparse
加载这些矩阵(请参见dask.delayed),并将它们连接到一个大型稀疏dask数组中


我将不得不在不久的将来实现类似的东西。我想Dask应该更本地地支持这一点…

你不能
Dask
可用于numpy阵列。scipy稀疏矩阵不是numpy数组。它的属性可能是数组。例如,
coo
格式使用3个数组,存储非零元素数据和索引。但是
Dask
对此一无所知。事实上,您可以:我建议您提供一个示例,您是否有时间实现加载稀疏矩阵的功能?我正在尝试用sparse.COO块类型保存dask数组,但这似乎仍然是唯一的选择。不,不幸的是,我没有。我最终在这个用例中使用了数据帧。然而,也许TileDB值得你一看。它大大简化了稀疏数据的存储。谢谢,我来看看!