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 ドキュメントのこのセクションでは、マットの補助メモリの割り当てについて説明しています。これはヒープ割り当てと同じですか? 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 にそれを使用するように指示します。