【发布时间】:2013-12-21 11:11:32
【问题描述】:
我有两个 c 的布尔稀疏方阵。从 12BM 的数据生成 80,000 x 80,000(当我使用 GB 的数据时,矩阵可能会大几个数量级)。
我想将它们相乘(这会产生一个三角矩阵 - 但是我没有得到这个,因为我没有将点积限制为产生一个三角矩阵)。
我想知道将它们相乘的最佳方法是什么(内存方面和速度方面) - 我将在具有 >60GB RAM 的 m2.4xlarge AWS 实例上进行计算。出于速度原因,我更愿意将计算保留在 RAM 中。
我很欣赏 SciPy 和 h5py 的稀疏矩阵,但两者都没有经验。
最好的选择是什么?
提前致谢
更新:布尔矩阵的稀疏性
【问题讨论】:
-
你是否将它们作为布尔值相乘,即结果是布尔类型?以及您的数据有多稀疏,占多少?
-
是的,我将它们作为布尔值与 0、1 相乘,因此得到的结果矩阵中的数字为 0 或大于 0 的整数。如何检查矩阵的稀疏性?
-
你生成的,你可以从算法中知道。您可以使用
sum()检查数量并除以总大小(在您的情况下为 6.4*10**9) -
布尔矩阵中其余 0.6% 的数字为零
-
我不确定,但我认为结果通常不会稀疏,您将无法将其存储在几十 GB 的 RAM 中。无论如何,检查 scipy.sparse 中的 csr 和 csc 稀疏格式。
标签: python numpy sparse-matrix pytables h5py