`

Eigen中Map的高级用法

c++ 
阅读更多
Map类 是 矩阵库Eigen中用来将内存数据 映射为 任意形状的矩阵的类。
其基本用法参见:http://cherishlc.iteye.com/blog/1968238
Map的官方文档:http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
Stride类的官方文档:http://eigen.tuxfamily.org/dox/classEigen_1_1Stride.html

这里给出其最为灵活的用法的一个示例:
将一个矩阵的第一行copy到另一个矩阵(要是Eigen有reshape函数就不用这么麻烦了。。。别说,还真有!可以用resize代替~~)
先上结果:



附上代码:
#include <Eigen/Core>
#include <iomanip>
#include <iostream>

using std::setw;
#define printlnExp(exp) std::cout<<std::left<<setw(30)<<(std::string(#exp)+"  为:")<<std::endl<<(exp)
#define printlnExpln(exp) printlnExp(exp)<<std::endl

void main() {
    using namespace Eigen;
    MatrixXd m (4, 6);
    for (int i = 0; i < m.size(); ++i) {
        m (i) = i;
    }
    printlnExpln (m);
    MatrixXd msub (2, m.cols() / 2);
    //将 m 的第一行存入 msub中。  Stride 的第一个参数为OuterStride,对于按列优先存储的矩阵来说,就是 列与列之间指针的差值; 第二个参数为InnerStride,即两个相邻元素 指针之间的差值
    msub = Map<MatrixXd, 0, Stride<Dynamic, Dynamic> > (m.data(), msub.rows(), msub.cols(), Stride<Dynamic, Dynamic> (m.rows() * msub.rows(), m.rows() ) );
    printlnExpln (msub);


    //////////////////////////////////////////////////////////////////////////
    MatrixXd msub2 = m.row (0);
    msub2.resize (2, m.cols() / 2);//将resize函数作为reshape函数使用,可以达到同样的效果, 是不是觉着很爽啊~ 但是反过来,,,不可能用此方法去给m的第一行赋值
    printlnExpln (msub2);
    //////////////////////////////////////////////////////////////////////////

    //以下方法显然是错的。。。
    MatrixXd msub3 (2, m.cols() / 2);
    msub3 = m.row (0);
    printlnExpln (msub3) << std::endl;



    std::cout << "以下是测试将m的第一行置为msub中的相反数////////////" << std::endl << std::endl;
    m.row (0) = -MatrixXd::Map (msub.data(), 1, m.cols() );
    //m.row(0) = -Map<MatrixXd>(msub.data(), 1, m.cols());//这样写也行
    printlnExpln (m);
}
  • 大小: 13.6 KB
分享到:
评论

相关推荐

    论文研究-基于Laplacian Eigenmap的图像变化检测虚警优化技术.pdf

    通过深入分析多个传统的变化检测方法的特点,利用各方法的互补性,提出了利用Laplacian Eigenmap对多个方法检测结果进行降维分类的优化技术。首先把各个方法对某个像素的检测结果用向量的形式进行表示,然后利用...

    Eigen类库的中文简易教程

    **Eigen类库中文简易教程** Eigen是一个开源的C++矩阵和向量库,它专注于高效、灵活和易于使用。这个库被广泛应用于数值计算...通过本教程的学习,读者可以熟练掌握Eigen的基本用法,并在实际项目中有效地利用其功能。

    网页版eigen中文教程_eigen教程_eigen;矩阵函数库;中文教程_

    教程可能还涵盖了如何使用稀疏矩阵、进行矩阵运算(如乘法和求逆)以及如何在实际项目中应用Eigen。 为了更好地掌握Eigen,建议按照以下步骤学习: 1. **基础概念**:首先,了解矩阵和向量的基本概念,以及Eigen...

    eigen库使用教程,使用说明文档

    此外,还可以使用`Eigen::Map`来操作已有的数据结构,如内存中的数组,而无需复制数据。 ### 7. 实例与最佳实践 在实际应用中,我们常常需要根据具体需求调整代码。例如,在机器学习算法中,可能需要使用`Eigen::...

    eigen3.3.9版本安装包

    Eigen是一个开源的C++库,专门用于处理线性代数问题...总之,Eigen3.3.9是一个强大的C++线性代数库,适用于各种科学计算和工程应用。安装和使用都非常直观,同时提供高效的算法和优化,使得它成为开发人员的首选工具。

    Eigen3检查安装测试代码

    这展示了Eigen3对于高级线性代数操作的支持。 通过编译并运行这两个测试文件,我们可以检查Eigen3的基本功能是否正常工作。如果编译无误且输出符合预期,那么就可以确认Eigen3已经成功安装并且可以在项目中使用。 ...

    eigen3.3.3版本安装包

    Eigen库是C++中用于线性代数计算的一个开源库,尤其在处理矩阵和向量操作时非常高效。它的设计简洁、易于使用,并且优化了性能。Eigen3.3.3是该库的一个稳定版本,提供了许多改进和新特性。 Eigen库的核心特性包括...

    eigen3+vs2017+cmake使用vs2017编译Eigen3库 Eigen3.3.9库

    在本教程中,我们将探讨如何使用Visual Studio 2017(VS2017)和CMake来编译Eigen3.3.9库,这个版本支持32位和64位平台。 首先,我们需要确保已安装以下软件: 1. Visual Studio 2017:这是Microsoft的集成开发环境...

    eigen-3.2.10.zip

    使用Eigen库,开发人员可以轻松地在C++项目中处理线性代数问题,广泛应用于计算机视觉、机器学习、数值计算等领域。例如,在计算机图形学中,Eigen常用来进行变换矩阵的计算;在机器学习中,它用于处理特征向量和...

    eigen库使用方法.zip

    提供的`Eigen介绍及简单使用.doc`文档应该详细介绍了Eigen的基本概念和常用操作,并通过示例程序`Eigen操作_test`演示了如何在VS2015中实际应用这些知识。这个文档和程序是理解并快速上手Eigen的良好资源,对于初学...

    QT中配置的库(Eigen、OpenCV、Gocator SDK)

    QT是一个流行的开源跨平台应用程序开发框架,用于编写C++应用程序。...这样的组合为创建高级视觉应用提供了坚实的基础。记得在实际操作时,根据你的系统环境和库版本进行相应的调整,确保所有库都能正确链接和运行。

    Eigen3.3.7_SourceCode.7z,Eigen源码

    总的来说,Eigen3.3.7是C++开发中的强大工具,无论你是进行科学计算、机器学习还是图形处理,它都能提供高效、灵活的线性代数支持。通过深入理解其源码,开发者不仅可以提升编程技能,还能更好地优化自己的项目。

    EIGEN安装包 (C++矩阵运算)

    对于高级功能,EIGEN提供了如QR分解、LU分解、SVD(奇异值分解)等数值线性代数方法,以及求解线性方程组的工具。这些功能对于科学计算、图像处理、机器学习等领域非常有用。 总的来说,EIGEN是一个强大的C++矩阵...

    C++矩阵库 Eigen 快速入门

    近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了。 Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,...

    Eigen3_Eigen33.4_线性代数_矩阵和矢量运算_eigen3.3

    在本文中,我们将深入探讨Eigen3.3的主要特性和用法。 1. **高效与性能**: Eigen3的设计目标之一就是性能。它通过内联函数、模板元编程和最小化临时对象来优化计算效率。此外,Eigen3还支持SSE(Streaming SIMD ...

    eigen-3.4.0.tar.gz

    描述中提到的"百度无人车Appollo依赖库"表明Eigen在高级自动驾驶系统中扮演了重要角色,因为它提供了高效的数学计算能力,这对于处理复杂的传感器数据和路径规划至关重要。 Eigen库的核心特性包括: 1. **高效性能...

    eigen-3.1.0.tar.gz

    在实际应用中,Eigen常被用于解决线性代数问题,如求解线性方程组、计算特征值、进行矩阵分解等。在计算机视觉领域,例如相机标定、姿态估计、光流计算等任务,Eigen都能发挥重要作用。而在机器学习中,如支持向量机...

    Eigen矩阵运算库源代码

    Eigen矩阵运算库是C++编程中的一个强大工具,专门用于处理线性代数问题,包括矩阵和向量的运算、数值分析以及相关的算法。这个库的设计目标是高效、易用和灵活,使得开发者能够快速地在C++项目中集成线性代数功能。 ...

    Eigen 3 库文件及 unsupported 文件

    总的来说,Eigen 3库是C++中进行高效线性代数运算的重要工具,特别是在深度学习和嵌入式系统中。理解并熟练使用Eigen可以帮助开发者构建更快、更优化的计算流程。在TensorFlow中,Eigen的作用不可忽视,它是实现高效...

    Eigen求解线性方程组

    4. **线性方程组求解**:使用Eigen库提供的高级功能完成求解任务,具体而言,可以使用Eigen的直接求解器或迭代求解器。 #### 五、总结 通过上述方法,我们可以方便地使用C++和Eigen库来求解线性方程组。这种方法...

Global site tag (gtag.js) - Google Analytics