在 MATLAB 中,以下行将Matrix转换为Vector.It将列逐列展平为矢量。
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
答案 0 :(得分:11)
默认情况下,特征矩阵以列主要顺序存储,因此您只需使用Eigen Maps在数组中逐列存储数据:
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()));
答案 1 :(得分:1)
如果您想在不定义新变量的情况下更改矩阵值,可以使用
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]
答案 2 :(得分:-1)
另一种方法是:
...
VectorXd B = A;
B.resize(B.cols()*B.rows(), 1);
或者,如果您想按行顺序执行矢量:
...
VectorXd B = A.transpose();
B.resize(B.cols()*B.rows(), 1);
问候。