2016-06-28 10 views
0

Eigen3ライブラリのTensorモジュールを使用してテンソルのFrobeniusノルムを計算しようとしています。Eigen3 Tensorクラスのすべての次元に沿った縮小の評価

は、ここに私のコードです:

#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_opからfrob_normを抽出するための簡単な方法が存在すべきであることを推測します。何か案は?

The exampleは、実行時エラーをスローします。

答えて

0

私は自分自身に返信します。 これが最善の方法であるかどうかは分かりませんが、それは前のものよりもソートされています:

#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; 
} 
関連する問題