当我尝试在本征中用lpNorm<1>调用colwise()时出现错误:



相反,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

如果取消注释最后一行,则会出现错误。

有人可以帮忙吗?

最佳答案

在Eigen colwise实现。您有两种选择:

  • 升级到Eigen 3.3(测试版)
  • 遍历所有列并逐一计算lp范数。
  • 07-24 14:28