Ich habe eine Klasse, die mehrere zugeordnete Matrizen als Mitglieder hat. Der Code ist unten dargestellt:In Eigen, wie mehrere gemappte Matrizen als Array von Matrizen zu kombinieren
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;
}
Jetzt habe ich mat1
und mat2
sein ein Array von zwei matrics, wie mat[0]
und mat[1]
machen will. Ich habe versucht, so etwas zu tun:
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];
};
Es ist offensichtlich nicht funktioniert, da ich dies in der Initialisiererliste cant do. Aber um diese Art von Mapping mit Schritt zu machen, muss ich die Initialisierungsliste verwenden. Hat jemand eine Idee, wie man das umsetzt?
Ich versuchte dies und bekam "' Fehler: schlechte Array-Initialisierer ". Könnte das ein Compiler-Problem sein? Ich benutze g ++ 4.4.7 mit dem Flag '-std = C++ 0x'. – Yang
es ist zu alt. versuchen Sie mindestens 4.9 – kangshiyin
danke, ich werde es einmal versuchen unser Computersystem administrative machen die neuere Version von 'gcc' heute verfügbar. Eine Folgefrage wäre, was wäre, wenn ich möchte, dass die Anzahl der Matrizen "nmat" anstelle von "2" ist? Gibt es eine Möglichkeit, eine For-Schleife in die Initialisierungsliste aufzunehmen? – Yang