我正在使用c++构建一个链接到python代码的pybind11程序。我用本征来做矩阵运算。我对本征阵列的切片有问题。根据特征文档,可以使用Eigen::placeholders::all
-
std::vector<int> ind{4,2,5,5,3};
MatrixXi A = MatrixXi::Random(4,6);
cout << "Initial matrix A:\n" << A << "\n\n";
cout << "A(all,ind):\n" << A(Eigen::placeholders::all,ind) << "\n\n";
但是,当我试图在代码中使用这个语法时,会出现以下错误:
error: ‘Eigen::indexing’ has not been declared
我找到了对此的解释--我使用的特征头是pybind11的,而不是原始的Eigen
头。这解释了这个问题,但无助于解决问题。
我尝试过包括原始的特征头,但它不包括indexing
或placeholders
名称空间。
谢谢你的帮助!
编辑:下面是我试图编译的代码:
#include <pybind11/pybind11.h>
#include <pybind11/eigen.h>
#include <pybind11/stl.h>
#include <pybind11/numpy.h>
#include <pybind11/iostream.h>
#include <iostream>
#include <valarray>
#include <Eigen/Core>
namespace py = pybind11;
void example()
{
std::vector<int> ind{4,2,5,5,3};
Eigen::MatrixXi A = Eigen::MatrixXi::Random(4,6);
std::cout << "Initial matrix A:\n" << A << "\n\n";
std::cout << "A(all,ind):\n" << A(Eigen::placeholders::all,ind) << "\n\n";
}
为此,我得到了以下错误:
error: ‘Eigen::placeholders’ has not been declared
发布于 2022-11-23 13:59:11
最终,我解决了这个问题--这是cmake文件的一个问题,具体来说,FindEigen3.cmake
在cmake文件夹下丢失了。不知为何,(可能是因为pybind11/Eigen
头),程序能够编译,但找不到所有相关的头。在cmake文件夹下添加FindEigen3.cmake
之后,所有包含的文件夹都是正确的,我可以使用Eigen::placeholders::all
。谢谢您的帮助!
https://stackoverflow.com/questions/74538756
复制相似问题