首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >本征::占位符::所有用于pybind11的特征数组/矩阵

本征::占位符::所有用于pybind11的特征数组/矩阵
EN

Stack Overflow用户
提问于 2022-11-22 20:44:21
回答 1查看 18关注 0票数 0

我正在使用c++构建一个链接到python代码的pybind11程序。我用本征来做矩阵运算。我对本征阵列的切片有问题。根据特征文档,可以使用Eigen::placeholders::all -

代码语言:javascript
运行
复制
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头。这解释了这个问题,但无助于解决问题。

我尝试过包括原始的特征头,但它不包括indexingplaceholders名称空间。

谢谢你的帮助!

编辑:下面是我试图编译的代码:

代码语言:javascript
运行
复制
#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";
}

为此,我得到了以下错误:

代码语言:javascript
运行
复制
error: ‘Eigen::placeholders’ has not been declared
EN

回答 1

Stack Overflow用户

发布于 2022-11-23 13:59:11

最终,我解决了这个问题--这是cmake文件的一个问题,具体来说,FindEigen3.cmake在cmake文件夹下丢失了。不知为何,(可能是因为pybind11/Eigen头),程序能够编译,但找不到所有相关的头。在cmake文件夹下添加FindEigen3.cmake之后,所有包含的文件夹都是正确的,我可以使用Eigen::placeholders::all。谢谢您的帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74538756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档