在Eigen中计算lpNorm列

时间:2016-08-07 09:31:54

标签: c++ eigen

当我尝试在Eigen中使用<html> <body> <div class="red"></div> <div class="blue"></div> <div class="red"></div> <div class="blue"></div> <div class="red"></div> <div class="blue"></div> <div class="red"></div> <div class="blue"></div> <div class="red"></div> </body> </html> 调用lpNorm<1>时出现错误:

  

错误:&#39; Eigen :: DenseBase&gt; &GT; :: ColwiseReturnType&#39;没有名为&#39; lpNorm&#39;

的成员

相反,norm()和squaredNorm()可以很好地将它们称为colwise。

例如

colwise()

工作得很好

  #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;
}

如果我取消注释最后一行,我会收到错误消息。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

在Eigen&lt; = 3.2.9中没有为colwise实现。您有两种选择:

  1. 升级至Eigen 3.3(测试版)
  2. 遍历所有列并逐个计算lp规范。

答案 1 :(得分:1)

您可以这样绕过它:

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

不幸的是,它仅在L1规范(等效于绝对值)的情况下起作用。