Я использую Armadillo для манипулирования большими матрицами в C ++, считываемыми из CSV-файла.
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 объясняется распределение вспомогательной памяти мата. Это то же самое, что и распределение кучи? Требуется предварительное знание размеров матрицы, чего я не узнаю, пока X не будет прочитан из csv:
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 использовать ее.