c++ - 将特征矩阵映射到 C 数组

标签 c++ arrays matrix eigen

我最近开始使用 Eigen图书馆。我遇到了将特征矩阵映射到 C/C++ 数组的问题。默认情况下,特征矩阵是列专业的。因此,如果我使用以下代码将矩阵映射到 C/C++ 数组,

double a[10];
double *p = &a[0];
MatrixXd(2,5) m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
cout<<m<<endl;
Eigen::Map<MatrixXd>(p,2,5) = m;
for (int i=0; i<10; i++)
    cout<<a[i]<<" ";
cout<<endl;

输出是:

0 1 2 3 4
1 2 3 4 5
0 1 1 2 2 3 3 4 4 5

如果我将 m 的定义更改为行专业:

Matrix <double,2,5,RowMajor> m;

我希望输出看起来像这样:

0 1 2 3 4
1 2 3 4 5
0 1 2 3 4 1 2 3 4 5

但实际上结果还是和第一个一样。我的问题是,有没有办法将特征矩阵映射到 C/C++ 数组,以便数组的数据是基于行的?

我发现我可以使用 matrix.data() 内存函数来获得所需的结果,但我想知道我是否可以使用 map 来做到这一点:

使用 matrix.data() 有效:

double a[10];
double *p = &a[0];
Matrix <double,2,5,RowMajor> m;
for (int i=0; i<2;i++)
    for (int j=0; j<5;j++)
        m(i,j) = i+j;
double *p1 = m.data();
for (int i=0; i<10; i++)
    cout<<p1[i]<<" ";
cout<<endl;

最佳答案

重要的不是矩阵 m 的类型,而是 Map 模板中使用的类型。您必须将 Map 模板中使用的类型更改为行优先。

Eigen::Map<Matrix<double,2,5,RowMajor> >(p,2,5) = m;

关于c++ - 将特征矩阵映射到 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535399/

相关文章:

Go 中类似 C++ 模板的行为

C++11:使用正则表达式进行两种可能的匹配次数的安全实践

c++ - 页面源的http请求是什么?

list - 在 Haskell 中旋转 char 矩阵图像

python - 这个向量是如何工作的?

c++ - 使用符号 C++ 库 : Ho to print Matrix output description in objective c? 因为我添加了两个矩阵。代码如下。谢谢

javascript - 在 d3.js 中从 CSV 中选择一段数据

c# - 有没有办法避免在 C# 中编写重复代码?

c++ - OpenCV - 将相机矩阵和畸变系数存储为 Mat

ios - Objective-C UIButton 网格生成