在特征中计算lpNorm列

computing lpNorm column wise in Eigen

本文关键字:lpNorm 计算 特征      更新时间:2023-10-16

当我尝试调用lpNorm<1>colwise()的特征时,我得到错误:

error: 'Eigen::DenseBase>>::ColwiseReturnType'没有名为'lpNorm'的成员

相反,norm()和squaredNorm()可以很好地并行调用。

例子
  #include <Eigen/Dense>
  #include <iostream>
  using namespace std;
  using namespace Eigen;
  int main()
  {
    MatrixXf m(2,2), n(2,2);
    m << 1,-2,
      -3,4;
    cout << "m.colwise().squaredNorm() = " << m.colwise().squaredNorm() << endl;
    cout << "m.lpNorm<1>() = " << m.lpNorm<1>() << endl;
 //  cout << "m.colwise().lpNorm<1>() = " << m.colwise().lpNorm<1>() << endl;
}

m.colwise().squaredNorm() = 10 20
m.lpNorm<1>() = 10

如果取消最后一行的注释,就会得到错误。

有人能帮忙吗?

特性<=3.2.9中对colwise不实现。您有两个选项:

  1. 升级到Eigen 3.3 (beta)
  2. 循环遍历所有列,逐个计算lp规范。

你可以这样绕过它:

m.cwiseAbs().colwise().sum()

不幸的是,它只适用于L1范数(相当于绝对值)的情况。