阅读';大型';C+中的数据文件+; 我试图复制一个旧的R代码,我已经进入C++中以获得一些速度。 此代码需要使用预加载的数据(6个维度为13689 x 126的矩阵)(每个矩阵在.txt文件中的权重约为28 MB)。将其加载到内存中不会导致R出现任何问题 我构建了一个C++代码(我是C++新手),我尝试“预加载”这些数据(不管怎样,它都要在头文件BTW中预加载)。p> inti,j; const int length_grid1=13689; 常量整数长度网格长度=126; 如果输入; //双M1β[长度网格1][长度网格pl];//不是这个,就是另一个 std::阵列M1_β; in.open(“预加载的对象/M1_BETA.txt”); 对于(i=0;iM1_β[i][j]; } } in.close();

阅读';大型';C+中的数据文件+; 我试图复制一个旧的R代码,我已经进入C++中以获得一些速度。 此代码需要使用预加载的数据(6个维度为13689 x 126的矩阵)(每个矩阵在.txt文件中的权重约为28 MB)。将其加载到内存中不会导致R出现任何问题 我构建了一个C++代码(我是C++新手),我尝试“预加载”这些数据(不管怎样,它都要在头文件BTW中预加载)。p> inti,j; const int length_grid1=13689; 常量整数长度网格长度=126; 如果输入; //双M1β[长度网格1][长度网格pl];//不是这个,就是另一个 std::阵列M1_β; in.open(“预加载的对象/M1_BETA.txt”); 对于(i=0;iM1_β[i][j]; } } in.close();,c++,database,stream,C++,Database,Stream,使用double或array的两个版本都不起作用:我可以编译文件(使用Intel Composer),但当我启动.exe时,它会立即崩溃。只有一个矩阵加载时会发生这种情况。。。我必须装6个 我不认为这是源于我的代码的问题,当我减少数据维度时,它会毫无问题地自行执行。 请注意,如果没有加载所有内容,我将无法在以后运行该程序。部分重新加载它会减少速度,我想(我切换到C++以获得计算速度)。 程序崩溃是因为28MB太多了吗?看起来很奇怪,因为R没有任何问题,例如 否则,我可以以一种在内存中占用更少空间

使用double或array的两个版本都不起作用:我可以编译文件(使用Intel Composer),但当我启动.exe时,它会立即崩溃。只有一个矩阵加载时会发生这种情况。。。我必须装6个

我不认为这是源于我的代码的问题,当我减少数据维度时,它会毫无问题地自行执行。
请注意,如果没有加载所有内容,我将无法在以后运行该程序。部分重新加载它会减少速度,我想(我切换到C++以获得计算速度)。 程序崩溃是因为28MB太多了吗?看起来很奇怪,因为R没有任何问题,例如

否则,我可以以一种在内存中占用更少空间的方式预加载吗?之后,我需要轻松访问任何一行数据(逐单元格并不重要,我需要的是真正快速地访问特定的行)

< C++ >是否还有其他方法来存储数据,在任何时候都可用?


提前感谢。

您应该使用
std::vector
,因为
std::array
是在堆栈上实例化的。看看和。

std::array M1_BETA
通常在堆栈中实例化,这对于大多数环境中可用的堆栈来说太大了,是的。对于大数据,您应该使用
std::vector
。它确实在使用std::vector,谢谢!数组有什么区别?
int i, j;
const int length_grid1 = 13689; 
const int length_grid_pl = 126; 

ifstream in;
//double M1_BETA[length_grid1][length_grid_pl]; // either this, or the other one
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA;
in.open("preloaded_object/M1_BETA.txt");
for (i = 0; i < length_grid1; i++) {
    for (j = 0; j < length_grid_pl; j++) { 
        in >> M1_BETA[i][j];
    }
}
in.close();