【问题标题】:How to correctly initialize, assign and use a dynamic Eigen matrix as a class member in C++?如何正确初始化、分配和使用动态特征矩阵作为 C++ 中的类成员?
【发布时间】:2015-11-30 20:43:04
【问题描述】:

我有一个具有动态特征矩阵的类。我想从文本文件中读取一个矩阵并将其分配给类矩阵变量。做这个的最好方式是什么?这就是我目前正在做的事情

class MyFoo
{
    MyFoo();
    Eigen::MatrixXd mat;
    void setMatrix();
}

MyFoo::MyFoo(): mat(Eigen::MatrixXd::Zero())
{};

void MyFoo::setMatrix()
{
    mat = HelperLib::readMatFromTXTfile("someFileName");
}

// Eigen::MatrixXd HelperLib::readMatFromTXTfile(const string &fname);

我的问题是:首先初始化似乎不正确。其次,使用 = 分配读取矩阵似乎也不是最优的。不幸的是,在 Eigen 主页上并没有太多这样的例子,或者我太菜鸟了,无法理解它们。

【问题讨论】:

  • 由于赋值的右侧是一个右值,赋值中的副本可能会通过移动语义被省略。

标签: c++ matrix dynamic eigen


【解决方案1】:

默认情况下,MatrixXd 对象被初始化为0x0 矩阵,因此无需显式将其初始化为空矩阵。此外,Matrix<>::Zero() 静态成员仅适用于固定大小的矩阵。对于MatrixXd,您需要指定其维度,通常Zero(n,m) 用于将矩阵初始化为用显式零填充的m x n 矩阵。

关于作业,CoryKramer 已经回答了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多