Eigen中norm、normalize、normalized的区别

norm()

对于Vector,norm返回的是向量的二范数,即

\|\mathbf{x}\|_{2}=\sqrt{\sum_{i=1}^{N} x_{i}^{2}}

例如:

Vector2d vec(3.0,4.0);
cout << vec.norm() << endl;	//输出5

对于Matrix,norm返回的是矩阵的弗罗贝尼乌斯范数(Frobenius Norm),即

\|\mathrm{A}\|_{F} \equiv \sqrt{\sum_{i=1}^{m} \sum_{j=1}^{n}\left|a_{i j}\right|^{2}}

例如:

Matrix2d mat;
mat << 1,2
    3,4;
cout << mat.norm() << endl;    //输出sqrt(1*1+2*2+3*3+4*4),即sqrt(30) = 5.47723

normalize()

清楚了norm()的定义后,normalize()其实就是把自身的各元素除以它的范数。返回值为void。

例如:

vec.normalize();
cout << vec << endl;    //输出:      0.6
                       //            0.8

mat.normalize();        //mat各元素除以mat.norm()
cout << mat << endl;    

normalized()

而normalized()与normalize()类似,只不过normalize()是对自身上做修改,而normalized()返回的是一个新的Vector/Matrix,并不改变原有的矩阵

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐