【问题标题】:Eigen Convert Matrix to Vector特征转换矩阵到向量
【发布时间】:2014-04-05 13:50:32
【问题描述】:

MATLAB 中,下面的行将矩阵转换为向量。它将矩阵逐列展平为向量。

myvar(:)

如何使用 Eigen 做到这一点?该解决方案应适用于 Matrix 的任何维度。

MatrixXd A(3,2);
VectorXd B(6);
A << 1,2,3,4,5,6;
B << A.col(0), A.col(1); 
//This isn't general enough to work on any size Matrix

【问题讨论】:

  • myvar(:) 将矩阵 column 明智地放入向量中,而不是按行方式。
  • 是的,谢谢,我更新了我的问题。

标签: matlab eigen


【解决方案1】:

特征矩阵默认以列主顺序存储,因此您可以简单地使用特征映射将数据逐列存储在数组中:

MatrixXd A(3,2);
A << 1,2,3,4,5,6;
VectorXd B(Map<VectorXd>(A.data(), A.cols()*A.rows()));

如果想要逐行排序的数据,需要先转置矩阵:

MatrixXd A(3,2);
A << 1,2,3,4,5,6;
A.transposeInPlace();
VectorXd B(Map<VectorXd>(A.data(), A.cols()*A.rows()));

【讨论】:

    【解决方案2】:

    如果您想在不定义新变量的情况下更改矩阵值,您可以使用

    Eigen::MatrixXd A(2,3);
    A.data()[3] = 1.2
    

    在这种情况下 data()[3] 将对应矩阵的索引 A[1,1],或者通过

    double value = A.data()[5];
    

    所以如果我写下整个 2by3 矩阵,它会是这样的

    A.data()[0]     A.data()[2]    A.data()[4]
    A.data()[1]     A.data()[3]    A.data()[5]
    

    【讨论】:

      【解决方案3】:

      另一种方法是:

      ...
      VectorXd B = A;
      B.resize(B.cols()*B.rows(), 1);
      

      或者,如果您希望向量按行顺序排列:

      ...
      VectorXd B = A.transpose();
      B.resize(B.cols()*B.rows(), 1);
      

      问候。

      【讨论】:

      • 将“矩阵”分配给“向量”肯定会失败。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2018-10-12
      • 1970-01-01
      • 2011-09-29
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多