[Eigen中文文档] STL迭代器和算法

简介: 从 3.4 版本开始,Eigen 的稠密矩阵和数组提供了 STL 兼容的迭代器。这使 Eigen 自然地与 range-for 循环和 STL 算法兼容。

文档总目录

英文原文(STL iterators and algorithms)

从 3.4 版本开始,Eigen 的稠密矩阵和数组提供了 STL 兼容的迭代器。这使 Eigen 自然地与 range-for 循环和 STL 算法兼容。

遍历一维数组和向量

任何稠密一维表达式都支持begin()/end()方法以进行迭代。

如下使用C++11的 range-for 循环:

// 代码索引 3-9-1-1
VectorXi v = VectorXi::Random(4);
cout << "Here is the vector v:\n";
for(auto x : v) cout << x << " ";
cout << "\n";

输出:

Here is the vector v:
7 -2 6 6

一维表达式也可以轻松传给 STL 算法:

// 代码索引 3-9-1-2
Array4i v = Array4i::Random().abs();
cout << "Here is the initial vector v:\n" << v.transpose() << "\n";
std::sort(v.begin(), v.end());
cout << "Here is the sorted vector v:\n" << v.transpose() << "\n";

输出:

Here is the initial vector v:
7 2 6 6
Here is the sorted vector v:
2 6 6 7

std::vector 类似,一维表达式也有一对 cbegin()/cend() 方法,以方便地获取非 const 对象上的 const 迭代器。

迭代二维数组和矩阵的元素

STL 迭代器本质上是设计用于迭代一维结构的。这就是二维表达式禁用 begin()/end() 方法的原因。但通过 reshaped() 创建二维表达式的一维线性对象,仍然可以轻松地迭代二维表达式的所有元素。

示例:

// 代码索引 3-9-1-3
Matrix2i A = Matrix2i::Random();
cout << "Here are the coeffs of the 2x2 matrix A:\n";
for(auto x : A.reshaped())
  cout << x << " ";
cout << "\n";

输出:

Here are the coeffs of the 2x2 matrix A:
7 -2 6 6

迭代二维数组和矩阵的行或列

也可以在二维表达式的行或列上使用迭代器。这可以通过 rowwise()colwise() 代理实现。如下是对矩阵的每一行进行排序的示例:

// 代码索引 3-9-1-4
ArrayXXi A = ArrayXXi::Random(4,4).abs();
cout << "Here is the initial matrix A:\n" << A << "\n";
for(auto row : A.rowwise())
  std::sort(row.begin(), row.end());
cout << "Here is the sorted matrix A:\n" << A << "\n";

输出:

Here is the initial matrix A:
7 9 5 3
2 6 1 0
6 3 0 9
6 6 3 9
Here is the sorted matrix A:
3 5 7 9
0 1 2 6
0 3 6 9
3 6 6 9
相关文章
|
2月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
33 0
|
2月前
|
算法 搜索推荐 程序员
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(一)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
41 0
|
3月前
|
存储 算法 搜索推荐
C++模板与STL【常用算法】
C++模板与STL【常用算法】
|
3月前
|
算法 C++ 容器
【C++】 --- STL常用算法总结(三)
【C++】 --- STL常用算法总结
28 0
|
3月前
|
存储 算法 搜索推荐
【C++】 --- STL常用算法总结(二 )
【C++】 --- STL常用算法总结
37 0
|
3月前
|
算法 C++ 容器
【C++】 --- STL常用算法总结(一)
【C++】 --- STL常用算法总结
34 0
|
4月前
|
算法 C++ 容器
【C++STL基础入门】list的运算符重载和关于list的算法
【C++STL基础入门】list的运算符重载和关于list的算法
【C++STL基础入门】list的运算符重载和关于list的算法
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
2天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
2天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
12 1