评估Eigen3 Tensor类中所有维度的减少量

时间:2016-06-28 17:14:08

标签: c++ eigen eigen3

我正在尝试使用Eigen3库的Tensor模块计算张量的Frobenius范数。

这是我的代码:

#include <unsupported/Eigen/CXX11/Tensor>

int main ()
{
  Eigen::Tensor<double, 3> t(4, 3, 2);
  t.setRandom();

  // Computing the Frobenius norm. The result is a single scalar value.
  const auto frob_norm_op = t.square().sum().sqrt().eval();

  // Is there an easier way to extract the scalar value ?
  Eigen::TensorEvaluator<const decltype(frob_norm_op), Eigen::DefaultDevice>
    frob_norm_eval (frob_norm_op, Eigen::DefaultDevice());
  const double frob_norm = frob_norm_eval.coeff(0);

  return 0;
}

这样做有效,但我想应该有一种更简单的方法从frob_norm中提取frob_norm_op。有什么想法吗?

The example文档会引发运行时错误。

1 个答案:

答案 0 :(得分:1)

我回复自己。 我不知道这是不是最好的方式,但它比前一个更好:

#include <unsupported/Eigen/CXX11/Tensor>

int main ()
{
  Eigen::Tensor<double, 3> t(4, 3, 2);
  t.setRandom();

  const Eigen::Tensor<double, 0> frob_norm_tens = t.square().sum().sqrt();
  const double frob_norm = frob_norm_tens.coeff();

  return 0;
}