c++ - Eigen :如何将未知大小的矩阵存储为类中的成员?

标签 c++ templates eigen

我最近一直在自学 C++,想在一个新项目中尝试一下。我决定使用 Eigen 构建一个非常简单的机器学习库来存储和操作数据。我想要一个数据类来存储特征矩阵并且可以对所述矩阵执行洗牌和分区操作。

我的麻烦在于确定成员矩阵的类型。理想情况下,我可以使用已经创建的特征矩阵调用构造函数,并让成员矩阵采用该类型。

成员矩阵如果要初始化它的类型应该做成什么类型 基于传递给构造函数的矩阵类型?有没有办法在不指定任何类型的模板参数的情况下做到这一点?

  template <class T1, class T2, class T3>
class Data{
    private:
        Eigen::MatrixBase<T1,T2,T3> X; 
    public:
        Data(Eigen::Matrix<T1,T2,T3> feature_matrix ): X{feature_matrix};
};


 int main()
  {
    Eigen::Matrix<int,2,2> m;
    m<<1,2,3,4 ;

    Data d(m);  //doesn't work because Data is missing template args

   return 0;
  }

要补充这个问题,因为似乎没有矩阵类的移动构造函数,是否有任何聪明的方法来构造数据类而不将矩阵复制到类中?

最佳答案

What type should I make the member matrix if I want its type to be initialized based on the type of matrix passed into the constructor? Is there a way to do this without specifying any type of template arguments?

直接……我不知道怎么做。

但是如果你接受使用模板“make”函数

template <typename T, int I1, int I2>
Data<T, I1, I2> makeData (Eigen::Matrix<T, I1, I2> em)
 { return em; }

使用auto(如果你可以使用C++11或C++14)你可以初始化d如下

auto d = makeData(m);

P.s.:我假设您的 Data 收到一个类型和两个整数作为模板参数;不是三种。

关于c++ - Eigen :如何将未知大小的矩阵存储为类中的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037109/

相关文章:

c++ - strdup 导致堆损坏

c++ - 变量模板可以变异吗?

c++ - 有歧义的递归模板函数

templates - Elasticsearch模板不读取参数

jquery - 如何用jquery实现递归模板

c++ - C++的特征值计算错误的特征值

c++ - Eigen不同方法(LDLT、​​SVD、QR)同一个矩阵的不同解

c++ - 如何初始化非默认构造的不可复制对象的元组?

c++ - 安全地迭代 std::vector 而项目可能被删除

c++ - 运算符 = 不明确 (C++)