Eigen使用

Eigen

1.使用Map函数,c++数组与 eigen矩阵的转换

在这里插入图片描述

2.eigen矩阵与opencv互转

在这里插入图片描述

3.eigen使用总结

https://zxl19.github.io/eigen-note/
https://eigen.tuxfamily.org/dox/group__QuickRefPage.html

4.eigen visual studio 和 ubuntu上

a.ubuntu上只需要CMakeLists.txt中添加

include_directories(“/home/xx/software/eigen-3.4.0”)

b.eigen 库在visual studio中的使用:
只需要添加包含目录即可
在这里插入图片描述

1)

在eigen中, matrices 和 vectors都是 Matrix template class的对象。
Vectors 是matrices的特殊case:行数为1或者列数为1

模板类一共有六个参数,一般使用前三个参数就足够了。比如
在这里插入图片描述

2)

Dynamic关键字 指示动态矩阵动态向量。 动态是运行时才知道size大小。
静态时编译时就知道size大小。一般比较小的矩阵可以使用静态。
静态和动态类似于:

int a[16];
int *a = new int[1000*1000];

3)初始化的方法

在这里插入图片描述

4)元素获取

用括号
m(1,2) //第2行第3列

5)resize

m.rows() m.cols() m.size()
resize 只能操作固定size的矩阵,如果resize后数量不变则无操作,数量变化会删除原来的数据

6)赋值操作

a = b //相当于把b copy到 a, 如果ab大小不同,会有resize的操作。

7)存储顺序

column major or row major

如果没有指定,默认是 ColMajor。
且两者可以互相转换,转换方法如下:
在这里插入图片描述

=======================================================================

8)算术操作

加减操作。必须类型(Scalar)相同,size相同。

矩阵与scalar的乘法,除法操作。

9)算术表达式

下面是可行的,而且可以更好的被优化

a = 3*b + 4*c - x/2;

10) 转置

在这里插入图片描述

11) 矩阵相乘

c = a * b -> [m,n] @ [n,m] = [m, m]

12)内积

在这里插入图片描述

13)外积

在这里插入图片描述

14)eigen中内积和外积分别是 dot, cross

dot适用于任意长度的向量
cross只适用于长度为3的vector

15)reduction 操作

在这里插入图片描述

===============================================================================
array class

16)array

matrix目的是为了线性集合操作,比如矩阵相乘。
Array 可以更好的执行 element-wise 操作。
比如对矩阵+上一个数,或者两个矩阵对应元素相乘。

定义
在这里插入图片描述

对应元素 加,减,乘的操作略

对应元素 abs, sqrt, min, max
在这里插入图片描述

17) array 和matrix

两个类的操作是不能互通的。因此如果你既想要矩阵相乘,又想要对应元素相乘,这个时候要首先进行转换。

.array() 和 .matrix() 可以是左值也可以是右值。而且基本上没有耗时

在这里插入图片描述

=======================================================================================

对于matrix

18)matrix : block(), row(), col() 和其他

block 输入 起始坐标(row,col)和对应高度宽度(height, width),输出矩形数据

在这里插入图片描述

m.row(i)
m.col(j)

其他取矩阵的操作
在这里插入图片描述

19)vector: head(), tail(), segment()

在这里插入图片描述

20)slicing和indexing 操作

在这里插入图片描述

21)根据索引提取列

在这里插入图片描述

22)一些初始化方法

在这里插入图片描述

23) 其他示例

// case1 reduction
// case2 范数
// case3, 按照行或者列进行reduction
// case4: 布尔 all, any, count 操作
// case5: partial recuctions
// case6: broadcasting
// case7: index:A({2, 1}, { 4,2,5,5,3 }) 先索引行,再选列
// case8: reshape 特点是默认按照col优先的储存顺序

#include <iostream>
#include <Eigen/Dense>
#include <algorithm>
using namespace std;
using namespace Eigen;
int main()
{
   
    // case1 reduction
    
### 使用CMake配置和构建Eigen项目 #### 准备工作 为了成功使用CMake来配置和构建Eigen项目,首先需要确保已经获取了Eigen库的源码。由于Eigen是一个头文件库,其主要功能由一系列模板类实现,因此理论上可以直接包含这些头文件而无需编译。然而,在某些情况下(如集成测试或特定平台支持),仍然可能希望通过完整的构建过程来进行验证。 #### 配置环境变量 对于Windows用户来说,遇到`Could NOT find Eigen3 (missing: Eigen3_DIR)`错误通常是因为未正确设置路径。可以通过指定`EIGEN3_INCLUDE_DIR`指向Eigen根目录下的`include/eigen3`位置解决此问题[^5]。 #### CMakeLists.txt编写指南 创建一个简单的`CMakeLists.txt`文件用于描述项目的依赖关系以及如何链接到Eigen: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProjectUsingEigen) set(CMAKE_CXX_STANDARD 17) find_package(Eigen3 REQUIRED) add_executable(my_program main.cpp) target_include_directories(my_program PRIVATE ${EIGEN3_INCLUDE_DIRS}) ``` 这段脚本定义了一个名为`MyProjectUsingEigen`的新工程,并指定了最低版本需求为CMake 3.10以上;接着设置了C++标准至C++17;最后尝试寻找系统中存在的Eigen包并将其加入可执行程序的目标属性中[^4]。 #### 执行具体操作命令 完成上述准备工作之后,则可以按照以下流程依次运行相应的CMake指令来完成整个构建过程: - **配置阶段** ```bash mkdir build && cd build cmake .. \ -G "Visual Studio 16 2019" -A x64 \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DEIGEN3_INCLUDE_DIR=/path/to/eigen/include/eigen3/ ``` 这里假设正在使用的是Visual Studio作为生成器(`Generator`),并且选择了64位架构为目标平台。同时设定了调试信息级别较高的发布模式(RelWithDebInfo),并通过显式提供`EIGEN3_INCLUDE_DIR`参数解决了潜在找不到Eigen的问题[^3]。 - **实际构建** ```bash cmake --build . --config RelWithDebInfo ``` 此处利用之前生成好的解决方案/项目文件进行具体的编译任务处理[^2]。 - **安装部署(如有必要)** 如果希望将编译产物复制到其他地方供后续分发或其他用途时,还可以继续追加一条安装命令: ```bash cmake --build . --config RelWithDebInfo --target install ``` 不过需要注意,默认情况下这一步骤可能会覆盖掉原有安装位置的内容,请谨慎选择是否启用该选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值