如何计算 Eigen 中向量的绝对值?

Posted

技术标签:

【中文标题】如何计算 Eigen 中向量的绝对值?【英文标题】:How do I compute the absolute value of a vector in Eigen? 【发布时间】:2014-08-16 14:09:23 【问题描述】:

由于显而易见的方式

Eigen::VectorXf v(-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0);
v.abs(); // Compute abs value.

不工作。

【问题讨论】:

试试cout << v.abs() << endl :) 你试过v = v.cwiseAbs();. 【参考方案1】:

对于 Eigen 3.2.1,以与使用 p.normalize 相同的方式使用 p.abs(); 会导致编译器错误

错误:'Eigen::Matrix' p.abs() 中没有名为 'abs' 的成员; ~ ^

所以 Eigen 中的向量只不过是 Matrix 类型。要在 Eigen 中计算矩阵的绝对值,可以使用 p.cwiseAbs() 或数组转换 p.array().abs();。这两个绝对函数都返回一个值,而不是修改变量本身。

所以正确的做法是这样做

p = p.cwiseAbs();

p = p.array().abs();

【讨论】:

以上是关于如何计算 Eigen 中向量的绝对值?的主要内容,如果未能解决你的问题,请参考以下文章

常见向量范数和矩阵范数

此函数如何通过 NOT 和 AND 运算计算浮点数的绝对值?

向量范数和矩阵范数

Eigen:按行计算矩阵的范数,比在向量上迭代计算它们要慢

matlab 如何求一个矩阵所有元素的绝对值的和

为啥用 Eigen 和 OpenCV 计算的 SVD 左奇异向量具有不同的符号