나는 당신이 원하는 것이 무엇인지 모르겠다. 그러나 나는 설명하려고 노력할 것이다.
코드에서 double과 float을 혼합합니다 (MatrixXf는 모든 항목이 부동 소수 인 행렬입니다). 나는 이것이 당신이 사방 팔방을 사용하기를 원한다는 의도하지 않은 순간이라고 가정 할 것입니다. 이것이 정말로 당신의 의도인지에 대해서는 아래를보십시오.
Map<MatrixXd>(arrayd, n, n) = matrix
명령어는 matrix
의 항목을 arrayd
으로 복사합니다. matrix = Map<MatrixXd>(arrayd, n, n)
: 그것은 matrix
에 arrayd
의 항목을 복사하려면 루프
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
동일합니다, 당신은 역 할당을 사용합니다. 행렬의 항목에
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
이제 arrayd 점, 당신은 어떤 C++ 배열로 처리 할 수 있습니다 :
그러나, 일반적으로 다음과 같은 기술은 더욱 유용하다. 데이터는
matrix
과
arrayd
사이에서 공유되므로 끝에 아무 것도 복사하지 않아도됩니다. 덧붙여서 을
foo()
함수에 전달할 필요가 없습니다. 행렬에 저장되기 때문입니다. matrix.rows() 및 matrix.cols()를 사용하여 해당 값을 쿼리합니다.
MatrixXf를 double 배열에 복사하려면 캐스트를 명시 적으로 포함해야합니다. 이를위한 Eigen의 구문은 Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
입니다.
이지도 기능은 무엇입니까? 보여줄 수 있습니까? –
그게 전부입니다 http://eigen.tuxfamily.org/dox/TutorialMapClass.html – Manolete