特征转换矩阵到向量

时间:2014-04-05 13:50:32

标签: matlab eigen

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

3 个答案:

答案 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);

问候。