简而言之,问题是如何通过
Eigen::Map<Eigen::MatrixXd>
Run Code Online (Sandbox Code Playgroud)
一个函数的对象,它期望一个
Eigen::MatrixXd
Run Code Online (Sandbox Code Playgroud)
目的。
更长的故事:
我有这个 C++ 函数声明
void npMatrix(const Eigen::MatrixXd &data, Eigen::MatrixXd &result);
Run Code Online (Sandbox Code Playgroud)
连同这个实现
void npMatrix(const Eigen::MatrixXd &data, Eigen::MatrixXd &result)
{
//Just do s.th. with arguments
std::cout << data << std::endl;
result(1,1) = -5;
std::cout << result << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我想使用 numpy.array 作为参数从 python 调用这个函数。为此,我使用了一个用 c++ 编写的包装函数
void pyMatrix(const double* p_data, const int dimData[],
double* p_result, const int dimResult[]);
Run Code Online (Sandbox Code Playgroud)
它需要一个指向数据的指针、数据数组的大小、一个指向结果的指针以及结果数组的大小。数据指针指向内存的常量补丁,因为当为结果保留的内存补丁可写时,数据不会被更改。函数的实现
void pyMatrix(const double *p_data, const int dimData[], double *p_result, const int dimResult[])
{
Eigen::Map<const Eigen::MatrixXd> dataMap(p_data, dimData[0], dimData[1]); …Run Code Online (Sandbox Code Playgroud)