如何将特征矩阵转换为 C/C++ 数组

How to Convert Eigen Matrix to C/C++ Array

在Eigen C/C++库中,如何将运算结果(如下示例)从Eigen矩阵转换为C/C++数组?

示例:

const Eigen::MatrixXf mat = Eigen::Map<Eigen::MatrixXf>( array_C_input , 3, 3);

const Eigen::MatrixSquareRootReturnValue<Eigen::MatrixXf> result = m.sqrt();

float* array_C_output = (float*) result;   // Error: convert sqrt output to C array

如果你想计算作为 C 风格数组传递的矩阵的矩阵根并像 C 风格数组一样处理结果,你可以将结果存储到 MatrixXf 并使用 data() 该矩阵的成员:

Eigen::MatrixXf matrix_root = Eigen::MatrixXf::Map( array_C_input , 3, 3).sqrt();
float* array_C_output = matrix_root.data();

或者,如果您已经为结果分配了内存,您可以将输出映射到:

void foo(float* output_array, float const* input_array) {
  Eigen::MatrixXf::Map( output_array , 3, 3) = 
       Eigen::MatrixXf::Map( input_array , 3, 3).sqrt();
}

请注意 Matrix::sqrt 计算矩阵根,即如果 S = A.sqrt(),则 S*S == M。如果你想要一个逐元素的根,你需要使用

Eigen::ArrayXXf::Map( input_array , 3, 3).sqrt()