特征库通过标准法则的N矩阵产生M.

时间:2017-03-23 22:21:30

标签: c++ eigen

我正在使用Eigen图书馆。我创建了一个大小为M×N的矩阵Z,它包含随机标准法线。一切看起来都很好,但是当我将M增加到100,000并且N增加到10,000时,我的程序没有明显的原因。

为了说明假设M = 4且N = 2,那么我将

 0.106358 -0.894365
 0.452166 -0.619815
 0.554152  0.257035
 0.654476  -1.26393

这是我们的预期。现在,当我设置M = 10000和N = 1000时,一切正常。但是一旦我设置M = 100000并且N = 10000,那么我在Eclipse上得到这个消息

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

我之前遇到过这种情况,但是当我重新启动电脑时,一切都还好。但出于某种原因,我似乎无法解决这个问题。非常感谢任何建议。

这是我的代码:

MatrixXd Z(M,N);
    random_device rd;
    mt19937 e2(time(0));
    normal_distribution<double> dist(0.0, 1.0);
    for(int i = 0; i < M; i++){
        for(int j = 0; j < N; j++){
            Z(i,j) = dist(e2);
        }
    }

此外,当我评论所有内容时,除非我设置MatrixXd Z(M,N)我的程序仍然崩溃。

1 个答案:

答案 0 :(得分:2)

尺寸为10000x100000的双打矩阵将具有以下尺寸:

8*10000*100000 = 8 000 000 000 bytes

这远远超过你可以在堆栈上分配(默认情况下在1 MB在MSVC中),以及32位程序可以分配的4 GB以上。

因此,请使用堆分配并以64位配置编译程序。

修改 是的,您还需要适当数量的RAM才能以合理的速度运行。