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