美文网首页c++
Eigen官网教程(5) 规约、范数等

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

作者: 淡水鱼Ada | 来源:发表于2021-03-04 14:47 被阅读0次

    转载: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的一列的索引。

    相关文章

      网友评论

        本文标题:Eigen官网教程(5) 规约、范数等

        本文链接:https://www.haomeiwen.com/subject/yplkqltx.html