c++ で行列の計算を頻繁に行うプログラムを書いています.
#現状
今までは,古の文化を大事に, new deleteを用いて書いていました.
c++
1 int ***data = new int**[N]; 2 for(i=0;i<N;i++){ 3 data[i] = new int*[M]; 4 for(j=0;j<M;j++){ 5 data[i][j] = new int[M]; 6 } 7 } 8 9 for(i=0;i<N;i++){ 10 for(j=0;j<M;j++){ 11 delete [] data[i][j]; 12 } 13 delete [] data[i]; 14 } 15 delete [] data;
#改善
このやり方に限界を感じ,Eigen というライブラリがあるのを見つけそちらを使おうと思ったのですが,
Eigenでは
c++
1data(M, M)
のサイズは扱えても,初心者の私が調べた限りでは
c++
1data(N, M, M);
の3次元は扱えませんでした.
行列計算は,私が扱う中で[256][4][4]
くらいのサイズが出てきて,4*4の行列の積を256回行ったり,LU分解や転置なども出てきます.
大変恐縮ではありますが,3次元の行列計算を扱える形での最も良い方法を教えていただければと思います.
私の調べた中では,Eigenを諦めてvectorを使い自分で計算するプログラムは書くべきなのかと考えています.
回答1件
あなたの回答
tips
プレビュー