c++

Eigen官网教程(5) 规约、范数等

2021-03-04  本文已影响0人  淡水鱼Ada

转载: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.png

3 -布尔规约**

如下的操作得到的是布尔值

  1. all()返回真,如果矩阵或数组的所有元素为真
  2. any()返回真,如果矩阵或数组至少有一个元素为真
  3. count()返回元素为真的个数


    image.png

4-迭代

当需要获得元素在矩阵或数组中的位置时使用迭代。Index 索引

image.png

5 部分规约


image.png image.png

6 - 部分规约和其他操作的结合**

使用部分规约操作得到的结果去做其他的操作也是可以的,如下例子用于得到矩阵中元素和最大的一列


image.png

7 -结合广播和其他操作**

广播也可以和其他操作结合,比如矩阵或数组的运算、规约和部分规约操作。下面介绍一个更加复杂的例子,演示了在矩阵中找到和给定向量最接近的一列,使用到了欧氏距离。

image.png

这句话做的工作是:

1)m.colwise()-v是一个广播操作,矩阵m的每一列减去v,得到一个新的矩阵

image.png

2)(m.colwise() - v).colwise().squareNorm()是部分规约操作,按列计算矩阵的平方范数,得到一个行向量

image.png

3)最终minCoeff(&index)根据欧氏距离获得矩阵中最接近v的一列的索引。

上一篇下一篇

猜你喜欢

热点阅读