从两个原始向量创建一个“Eigen :: Matrix”

时间:2017-11-18 20:19:51

标签: c++ eigen

有没有办法创建一个Eigen :: MatrixXd,其中每列来自不同的'原始'向量。例如,我想从文档中获取此代码:

int array[8];
for(int i = 0; i < 8; ++i) array[i] = i;
cout << "Column-major:\n" << Map<Matrix<int,2,4> >(array) << endl;

并将其更改为

int array1[4];
int array2[4];
for(int i = 0; i < 4; ++i) array1[i] = i;
for(int i = 4; i < 8; ++i) array2[i-4] = i;
Eigen::Map<Eigen::MatrixXd> m(nullptr, 4, 2);
m.col(0) = array1;
m.col(1) = array2;
cout << "Column-major:\n" << m << endl;

或类似的东西......有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果那只是两个阵列,你可以滥用步幅:

Map<MatrixXd,0,OuterStride<> > m(array1, 4, 2, OuterStride<>(array2-array1));

否则,您可以按照NullaryExr的示例轻松制作10行代码。基本上,你只需要一个班级:

class my_mat_type_func {
  std::vector<double*> m_column_pointers;
  Eigen::Index rows;
public:
  const double& operator() (Index row, Index col) const {
    return m_column_pointers[col][row];
  }
  // custom API to fill data, resize, etc.
};

并将其包装为NullaryExpr