有没有办法创建一个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;
或类似的东西......有没有办法实现这个目标?
答案 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
。