我正在使用 Armadillo 来操作从 CSV 文件读取的 C++ 中的大型矩阵。
mat X;
X.load("myfile.csv",csv_ascii);
colvec x1 = X(span::all,0);
colvec x2 = X(span::all,1);
//etc.
所以 x1,...,xk (k=20
比如说)是 X 的列。X 通常会有 2000 到 16000 的行。我的问题是:
如何将 X 分配(并随后解除分配)到堆(空闲存储)上?
Armadillo 文档的这一部分解释了垫子的辅助内存分配。这和堆分配一样吗?它需要矩阵维度的先验知识,在从 csv 读取 X 之前我不会知道:
mat(aux_mem*, n_rows, n_cols, copy_aux_mem = true, strict = true)
任何建议将不胜感激。(我正在使用 g++-4.2.1;我当前的程序在我的 Macbook Pro 上本地运行良好,但是当我在大学的计算集群(Linux g++-4.1.2)上运行它时,我遇到了分段错误。程序太大,无法发布)。
编辑:我最终这样做了:
arma::u32 Z_rows = 10000;
arma::u32 Z_cols = 20;
double* aux_mem = new double[Z_rows*Z_cols];
mat Z(aux_mem,Z_rows,Z_cols,false,true);
Z = randn(Z_rows, Z_cols);
它首先在堆上分配内存,然后告诉矩阵 Z 使用它。