【问题标题】:How to create an efficient 3D matrix using the Eigen library in C++?如何使用 C++ 中的 Eigen 库创建高效的 3D 矩阵?
【发布时间】:2016-10-23 20:37:29
【问题描述】:

对于机器人项目,我需要一个预定义大小的 3D 矩阵。使用 Eigen 库,我看不到如何: 1.)创建一个大的预定义矩阵,似乎我必须使用 matrixXd 但那是一个动态矩阵。 2.) 创建一个 3D 矩阵,即。 e. size = (int from 200 to 1000) and matrix (size, size, size)

【问题讨论】:

  • 有一个不支持的张量类,见here
  • 另外,请注意预定义大小的Matrix 分配在堆栈上,而动态MatrixXd 分配在堆上。

标签: c++ eigen robotics


【解决方案1】:
  1. 不建议使用静态分配创建大型矩阵,因为它会降低性能。
  2. 您可以创建 2D 矩阵的向量,而不是 3D 矩阵。

    例如:Eigen::MatrixX<:matrixxf dimension> tmp;

【讨论】:

    【解决方案2】:

    嗯,我找到了一种在我的项目中构建 3d 矩阵的方法。 使用向量:

    typedef vector<Matrix<double, Dynamic, Dynamic>> M3;
    

    如果要初始化一个维度为 (k,m,n) 的预定义矩阵,只需使用:

    M3 W(k, M2(m, n));
    

    这种方式很容易存储特征矩阵。但是如果你想计算 3d 矩阵,你应该把它切成许多 2d 矩阵,然后使用循环来得到 3d 结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2022-07-05
      • 1970-01-01
      • 2018-04-27
      相关资源
      最近更新 更多