调用matrix.array()后以数组格式保存矩阵 我从MATLAB切换到C++编写CFD求解器。我正在使用线性代数库。它具有许多矩阵和向量操作功能,但缺少将矩阵转换为数组的功能 MatrixXf m(2,2); m<<1,2,3,4; ArrayXf a(4); a=m.array();

调用matrix.array()后以数组格式保存矩阵 我从MATLAB切换到C++编写CFD求解器。我正在使用线性代数库。它具有许多矩阵和向量操作功能,但缺少将矩阵转换为数组的功能 MatrixXf m(2,2); m<<1,2,3,4; ArrayXf a(4); a=m.array();,c++,eigen3,C++,Eigen3,我不喜欢这个,因为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); Matrix

我不喜欢这个,因为
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); 
MatrixXf矩阵(2,2);
int cols=matrix.cols();
int rows=矩阵.rows;
ArrayXf数组(cols*行);

对于(int c=0;c如果不想复制值,可以使用
Eigen::Map
如下:

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

如果你做了
ArrayXf a(2,2);a=m.array();
它应该可以工作。不,它不工作了!(rowstatcompiletime!=动态)| |(nbRows==rowstatcompiletime))&&(!(colsatciletime!=动态)| |(nbCols==colsatciletime))&&(!(rowstatcompiletime==动态&&maxrowstatcompiletime!=动态)| |(nbRows=0&&&“调整矩阵或数组大小时无效。”“失败。谢谢..这就是我要找的:)
MatrixXf m(2,2);
m<<1,2,3,4;
Eigen::Map<ArrayXf> mp(m.data(), m.size());
ArrayXf a = mp;