关于稀疏存储以及稀疏运算
数据量大了之后就会存在存储以及计算效率的问题,于是有了这个帖子
这个问题背景是由于数据量越来越大,如果直接计算,内存不够,所以想稀疏矩阵每一列分别计算,这样就会存在空间足够但是时间太慢的问题,于是想到了使用并行计算。
问题可以抽象成两个子问题:
1.稀疏矩阵每一列执行相同的操作是否可行,类似于R里面的apply
2.稀疏矩阵的乘法怎么提高效率的问题
针对第一个问题,调研了一下scanpy里面稀疏矩阵的存储格式,发现非常的复杂,同时没有找到类似的函数。于是采用multiprocessing函数每次传入一个列的索引。
针对第二个问题,调研了一下稀疏矩阵的乘法,后来发现了@这个运算符号,效果还可以,暂时这么解决了,这个链接提供了更多的解决方案。
在函数封装的时候遇到了新的问题,就是并行不能函数嵌套,搜索之后找到了答案,两个方案都尝试了,效果都不如不封装之前的,这部分有空后续再来改进吧
后续继续学习资料:
参考资料
- https://developpaper.com/instructions-for-using-python-scipy-sparse-matrix/
- 常见的稀疏矩阵运算函数 https://docs.scipy.org/doc/scipy/reference/sparse.html
- https://developpaper.com/instructions-for-using-python-scipy-sparse-matrix/
- https://ericmjl.github.io/blog/2016/7/24/sparse-matrix-multiplication-in-python-3/
- https://stackoverflow.com/questions/72766345/attributeerror-cant-pickle-local-object-in-multiprocessing