Je pense que cela devrait être une chose très simple mais je ne la trouve pas résolue. J'essaye de faire une double contraction de deux tenseurs d'ordre de senond. Tout fonctionne bien, mais le résultat de la double contraction est un type Eigen
:Eigen :: Double contraction du tenseur à la valeur scalaire
Eigen::TensorContractionOp<const std::array<Eigen::IndexPair<int>, 2ul>, const Eigen::TensorFixedSize<double, Eigen::Sizes<3l, 3l> >, const Eigen::TensorFixedSize<double, Eigen::Sizes<3l, 3l> > >
mais je besoin d'un double
. Je peux l'imprimer mais ce n'est pas possible pour moi de travailler avec.
Le code est le suivant
#include <iostream>
#include <unsupported/Eigen/CXX11/Tensor>
int main()
{
auto tensor1 = Eigen::TensorFixedSize<double, Eigen::Sizes<3,3>>();
tensor1.setValues({ {1, 0, 0},
{0, 1, 0},
{0, 0, 1} });
std::cout << "tensor1:\n" << tensor1 << "\n";
auto tensor2 = Eigen::TensorFixedSize<double, Eigen::Sizes<3,3>>();
tensor2.setValues({ {2, 0, 0},
{0, 2, 0},
{0, 0, 2} });
std::cout << "tensor2:\n" << tensor2 << "\n";
Eigen::array<Eigen::IndexPair<int>, 2> contraction_pair0011
= { Eigen::IndexPair<int>(0, 0), Eigen::IndexPair<int>(1, 1)};
auto tensor1_tensor2 = tensor1.contract(tensor2, contraction_pair0011);
std::cout << "tensor1 : tensor2:\n" << tensor1_tensor2 << "\n";
// double value = tensor1_tensor2; // won't compile
}
je besoin d'une fonction ou d'appeler pour obtenir la valeur du résultat, l'espoir que quelqu'un pourrait me aider.
Vive Jonas