【发布时间】:2013-06-09 03:47:42
【问题描述】:
我有一个大小为 180GB(text , 30k * 3M) 的非常大且稀疏的矩阵,仅包含条目而没有其他数据。我必须对其进行矩阵乘法、求逆和一些类似的线性代数运算。我尝试了倍频程和简单的单线程 C 代码进行乘法运算,但我的 40GB 系统 RAM 很快用完,然后我发现程序开始抖动。我还有其他选择吗?我不熟悉 MathLab 或任何其他可以帮助我这样做的矩阵运算库。
当我运行两个具有 10 行和 3 M 列的矩阵的简单矩阵乘法及其转置时,会出现以下错误:
memory exhausted or requested size too large for range of Octave's index type
我不确定这是否适用于 Matlab。对于稀疏矩阵表示和矩阵乘法,是否有其他库或代码。
【问题讨论】:
-
你是说全矩阵数据是180GB,还是说稀疏表示本身是180GB?矩阵维度是多少,有多少个非零元素?
-
如果我做对了,您可以将整个 180GB 矩阵加载到一个 octave 变量中,那么当您尝试摆弄这个巨大的变量时就会遇到内存问题?你能把巨大的变量转换/转换成
sparse,例如m=readFromFile( hugeFileName.txt );m=sparse(m);吗? -
您必须阻止导入矩阵,将每个导入的块转换为稀疏并将其存储到元胞数组中。导入所有块后,只需一次将它们连接起来。您会注意到,如果您的稀疏度为 99%,则 180GB 将消失。]
-
请参阅this discussion,了解 Octave 中矩阵的大小限制(包括稀疏矩阵)。基本上归结为 Octave 在内部使用 32 位整数来索引矩阵的事实。您可以使用 64 bit indexing 构建 Octave,但所有 Octave 依赖项也都需要它。
-
MATLAB 允许稀疏索引为
2^48-1 = 281474976710655,其中3e4 * 3e6较小(对于 64 位操作系统)
标签: matlab matrix octave matrix-multiplication sparse-matrix