调用 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;
我从 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;