在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
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()));
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]
sdnqo3pr3#
从documentation of Eigen itself:
MatrixXd A; VectorXd B = VectorXd {A.reshaped()};
reshaped生成了矩阵的线性视图。
reshaped
uqjltbpv4#
另一种方法是:
... VectorXd B = A; B.resize(B.cols()*B.rows(), 1);
或者,如果希望按行顺序显示向量:
... VectorXd B = A.transpose(); B.resize(B.cols()*B.rows(), 1);
向你问好。
4条答案
按热度按时间utugiqy61#
默认情况下,特征矩阵以列为主顺序存储,因此您可以简单地使用特征Map在数组中逐列存储数据:
如果您想要逐行排序数据,则需要首先转置矩阵:
sq1bmfud2#
如果希望在不定义新变量的情况下更改矩阵值,可以使用
在这种情况下,data()[3]将对应于矩阵的索引A[1,1],或者通过
所以如果我写下整个2x3矩阵,它就会像
sdnqo3pr3#
从documentation of Eigen itself:
reshaped
生成了矩阵的线性视图。uqjltbpv4#
另一种方法是:
或者,如果希望按行顺序显示向量:
向你问好。