如何将特征矩阵转换为 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()
在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()