1
我有一個具有多個映射矩陣作爲成員的類。的代碼如下所示:在Eigen中,如何將多個映射矩陣組合爲矩陣陣列
class MyClass {
public:
MyClass(int nrow, int ncol, int nmat) :
arr(new int [nmat*nrow*ncol]),
mat1(arr, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)),
mat2(arr + 1, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)) {}
int *arr;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat1;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat2;
};
int main()
{
int nmat = 2; // number of matrices
int nrow = 3; // number of rows for each matrix
int ncol = 4; // number of columns for each matrix
int arr_size = nmat*nrow*ncol; // size of the array.
MyClass A (nrow, ncol, nmat);
for (int i=0; i<arr_size; i++) {
A.arr[i] = i+1;
}
cout <<"mat1 = \n"<<A.mat1<<endl;
cout <<"mat2 = \n"<<A.mat2<<endl;
return 0;
}
現在我想使mat1
和mat2
是兩個MATRICS的陣列,如mat[0]
和mat[1]
。我試圖做這樣的事情:
class MyClass {
public:
MyClass(int nrow, int ncol, int nmat) :
arr(new int [nmat*nrow*ncol]),
mat[0](arr, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)),
mat[1](arr + 1, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)) {}
int *arr;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat[2];
};
它顯然不工作,因爲我不能在初始化程序列表中執行此操作。但要做這種跨步的映射,我必須使用初始化列表。任何人都有如何實現這個想法?
我試過這個,並得到了「錯誤:錯誤的數組初始化器」。這可能是一個編譯器問題?我使用帶有標誌'-std = C++ 0x'的g ++ 4.4.7。 – Yang
它太舊了。試試至少4.9 – kangshiyin
謝謝,我會試一試,一旦我們的計算機系統管理使得今天可以使用更新版本的'gcc'。後續的問題是,如果我想讓矩陣的數量是'nmat'而不是'2',那該怎麼辦?有沒有辦法在初始化列表中引入'for'循環? – Yang