【问题标题】:C++ Eigen initialise dynamic matrix with raw dataC++ Eigen 用原始数据初始化动态矩阵
【发布时间】:2022-07-15 02:21:40
【问题描述】:

假设我有原始数据,在编译时我不知道其大小,这就是为什么我需要将其存储在动态大小的矩阵中。我知道我可以初始化一个静态大小的矩阵,如下所示:

  std::vector<double> v {1.1, 2.2, 3.3, 4.4};  // \"Raw data\".
  Eigen::Matrix<double, 2, 2> m(v.data());
  std::cout << m << std::endl;

但是有没有一种类似的初始化方法,或者(甚至更好)设置一个动态的矩阵?类似于以下内容(无法编译)?

  std::vector<double> v {1.1, 2.2, 3.3, 4.4};  // \"Raw data\".
  Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> m(v.data(), 2, 2);
  std::cout << m << std::endl;

我从this post 的评论中知道我可以使用Eigen::Map,但据我了解,Eigen::Map 不能自己的内存,所以我不能,例如,从函数中返回它。我知道我可以按元素设置矩阵,但这感觉太愚蠢了哈哈。

  • 如果在您的情况下仅使用 Eigen::Map 不起作用(因为原始内存被破坏或覆盖),您可以将 Map 复制到 Eigen::MatrixXd 对象。

标签: c++ eigen


【解决方案1】:

如果要复制原始数据,请将 Map 分配给普通矩阵。

std::vector<double> v {1.1, 2.2, 3.3, 4.4};
Eigen::MatrixXd m = Eigen::MatrixXd::Map(v.data(), 2, 2);

BTW:不需要处理Matrix&lt;double, 2, 2&gt;Matrix&lt;double, Dynamic, Dynamic&gt; 等模板参数:常见情况有类型定义。只需在您的示例中使用Matrix2dMatrixXd。类型定义列在here for matrixhere for array

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多