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

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

我从 matlab 切换到 C++ 来编写 CFD 求解器。我正在使用 Eigen 线性代数库。它具有许多用于矩阵和向量操作的函数,但缺少将矩阵转换为数组的函数。

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

这是我的解决方案

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

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

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

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

如果您不想复制值,您可以像这样使用 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;