我不确定你想要什么,但我会尽力解释。
您在代码中混合了双精度和浮点数(MatrixXf 是一个矩阵,其中每个条目都是浮点数)。我暂时假设这是无意的,并且您想在任何地方使用 double ;如果这真的是您的意图,请参见下文。
该指令Map<MatrixXd>(arrayd, n, n) = matrix
复制matrix
into的条目arrayd
。相当于循环
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arrayd[i + j*n] = matrix(i, j);
要复制arrayd
into的条目matrix
,您将使用反向赋值:matrix = Map<MatrixXd>(arrayd, n, n)
。
但是,通常以下技术更有用:
void foo(MatrixXd matrix, int n) {
double* arrayd = matrix.data();
// do something with the array
}
现在 arrayd 指向矩阵中的条目,您可以将其作为任何 C++ 数组进行处理。matrix
数据在和之间共享arrayd
,因此您不必在最后复制任何内容。顺便说一句,您不需要传递n
给函数foo()
,因为它存储在矩阵中;使用 matrix.rows() 和 matrix.cols() 来查询它的值。
如果您确实想将 MatrixXf 复制到双精度数组,则需要显式包含强制转换。Eigen 中的语法是:Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>()
.