Eigen官网教程(5) 规约、范数等
转载:Eigen官网教程(5) 规约、范数等
版权声明:本文为CSDN博主「一土山石」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SKANK911/article/details/89279675
1-Reductions
image.png
2-范数计算
向量的平方范数由squaredNorm()获得,等价于向量对自身做点积,也等同于所有元素平方和。Eigen也提供了norm()范数,返回的是squaredNorm()的根。这些操作也适用于矩阵。如果想使用其他元素级的范数,使用lpNorm<p>()方法,当求无穷范数时,模板参数p可以取特殊值Infinity,得到的是所有元素的最大绝对值。
image.png
矩阵的1范数和无穷范数也可以用下面的方法计算:
image.png3 -布尔规约**
如下的操作得到的是布尔值
- all()返回真,如果矩阵或数组的所有元素为真
- any()返回真,如果矩阵或数组至少有一个元素为真
-
count()返回元素为真的个数
image.png
4-迭代
当需要获得元素在矩阵或数组中的位置时使用迭代。Index 索引
image.png5 部分规约
image.png image.png
6 - 部分规约和其他操作的结合**
使用部分规约操作得到的结果去做其他的操作也是可以的,如下例子用于得到矩阵中元素和最大的一列
image.png
7 -结合广播和其他操作**
广播也可以和其他操作结合,比如矩阵或数组的运算、规约和部分规约操作。下面介绍一个更加复杂的例子,演示了在矩阵中找到和给定向量最接近的一列,使用到了欧氏距离。
image.png这句话做的工作是:
1)m.colwise()-v是一个广播操作,矩阵m的每一列减去v,得到一个新的矩阵
image.png2)(m.colwise() - v).colwise().squareNorm()是部分规约操作,按列计算矩阵的平方范数,得到一个行向量
image.png3)最终minCoeff(&index)根据欧氏距离获得矩阵中最接近v的一列的索引。