【问题标题】:Access Eigen:MatrixXd pointers for function taking Eigen::Vector3d of pointers访问 Eigen:MatrixXd 指针以获取采用 Eigen::Vector3d 指针的函数
【发布时间】:2022-01-18 22:26:43
【问题描述】:

可能是一件非常简单的事情,但我是 C++、Eigen 等的新手。

我有一个有 n 行的 MatrixXD。每行包含 3 个点 (x,y,z),我有一个函数,该函数将 vector3d 类型指针作为输入。我想遍历 MatrixXd 的所有行 n 并将每一行作为向量传递给我的函数。

我认为它是访问 MatrixXd 指针的组合 - 可能是这样的:

 int r = mydata.rows();
 int c = mydata.cols();

     for (int i = 0; i < r; ++i)
    {
        for (int j = 0; j < c; ++j)
        {
            myObject.myfunction(&mydata(i,j));
        }
    }

并使用返回的指针在每一行(即每次迭代)上调用我的函数。

更新 1: 这似乎可行。但是,我需要让 mydata(i,j) 返回指针而不是数据。

我想我可以看到另一个问题:在当前形式中,我认为这只是返回 i,j 处的元素,但我实际上需要返回一个指向 Vector3D 的指针。 data.row(i) 可能适用于此吗?

更新 2:

这样的东西可能更符合我的需要。仍然无法正常工作。我删除了 & - 这很有意义 - 现在它正在工作。

    int r = data.rows();
    int c = data.cols();

     for (int i = 0; i < r; ++i)
    {
            myObject.myFunction(data.row(i));
    }

如果我走在正确的道路上,您能否告诉我一些想法,如何解决这个问题或您需要哪些其他细节来帮助我更多?

【问题讨论】:

  • data.row(i) 不会“返回指向 Vector3D 的指针”。 data.row(i) 的结果可以转换为 Vector3d,这似乎是您所需要的。 (它不如使用std::vector&lt;Eigen::Vector3d&gt; 或Eigen::Matrix&lt;double, Eigen::Dynamic, 3, Eigen::RowMajor&gt; 而不是MatrixXd 高效)

标签: c++ pointers eigen


【解决方案1】:

解决了。上面发布的代码对我有用。

int r = data.rows();
    int c = data.cols();

     for (int i = 0; i < r; ++i)
    {
            myObject.myFunction(data.row(i));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2015-12-17
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多