调用matrix.array()后将矩阵保存为数组格式

Save the matrix in array format after calling matrix.array()

本文关键字:保存 数组 格式 array matrix 调用      更新时间:2023-10-16

我从matlab切换到c++来编写CFD求解器。我用的是本征线性代数库。它有很多用于矩阵和向量操作的函数,但缺乏将矩阵转换为数组的函数。

 MatrixXf m(2,2);
 m<<1,2,3,4;
 ArrayXf a(4);
 a=m.array();

这是我对

的解
 m.resize(4,1);
 a=m;

我不喜欢这样,因为m被改变了,这是我不想要的,因为m是一个非常大的矩阵。

如果你不想复制这些值,你可以使用Eigen::Map:

MatrixXf m(2,2);
m<<1,2,3,4;
Eigen::Map<ArrayXf> mp(m.data(), m.size());

您可以使用mp作为ArrayXf。注意,这指向原始的m矩阵,即。mp的更改将出现在m中。如果你想要一个副本,你可以使用:

ArrayXf a = mp;

您可以编写自己的函数并逐个值复制。

MatrixXf matrix(2,2);
int cols=matrix.cols();
int rows=matrix.rows;
ArrayXf array(cols*rows);
for(int c=0;c<cols;c++)
    for(int r=0;r<rows;r++)
        array(c*rows+r)=matrix(c,r);