我运行的代码如下:
#define ARMA_64BIT_WORD
#include <iostream>
#include </usr/include/armadillo>
using namespace arma;
typedef Mat<float> fmat;
typedef Col<float> fvec;
int main (int argc, char** argv)
{
fmat A;
A.load("matrix.txt");
fmat coeff;
fmat score;
fvec latent;
fvec tsquared;
princomp(coeff, score, latent, tsquared, A);
return 0;
}其中matrix.txt包含2×46341 (2行,46341列)矩阵。它运行良好,但当我将矩阵增加到2x46342(2行,46342列)时,发生了分段错误(核心转储)。
列数有什么限制或限制吗?或者,我写错了什么吗?
我运行的是Ubuntu12.04.4LTS(GNU/Linux3.2.0-40-虚拟x86_64),内存:16 in
谢谢你!
发布于 2014-11-12 23:55:00
princomp()将计算协方差矩阵(X‘* X),在本例中,协方差矩阵的大小为46342x43642。它的大小是16.001 GB,而你只有16 GB。这就是失败的原因。
如果使用调试符号(或不使用-DNDEBUG或类似符号)进行编译,则应该显示实际的内存分配失败。
我不能推荐任何其他的解决方案,因为我不知道你想要解决什么问题。
https://stackoverflow.com/questions/26826808
复制相似问题