matlab 矩阵到向量的特征转换

mspsb9vt  于 2022-11-15  发布在  Matlab
关注(0)|答案(4)|浏览(291)

在MatLab中,下面的行将矩阵转换为向量。它将矩阵一列一列地展平为一个矢量。

myvar(:)

我怎么才能和艾根在一起?该解应该适用于任何维度的矩阵。

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
utugiqy6

utugiqy61#

默认情况下,特征矩阵以列为主顺序存储,因此您可以简单地使用特征Map在数组中逐列存储数据:

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()));
sq1bmfud

sq1bmfud2#

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

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

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

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

所以如果我写下整个2x3矩阵,它就会像

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

sdnqo3pr3#

documentation of Eigen itself

MatrixXd A;
VectorXd B = VectorXd {A.reshaped()};

reshaped生成了矩阵的线性视图。

uqjltbpv

uqjltbpv4#

另一种方法是:

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

或者,如果希望按行顺序显示向量:

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

向你问好。

相关问题