Я хотел бы выполнить простые Tensorcontractions с модулем Eigen :: Tensor, но до сих пор я не понимаю, как вы обращаетесь к правильным размерам.
Вот мой текущий код:
Eigen::Tensor<double, 3> B(3,4,3); B.setRandom();
Eigen::Tensor<double, 3> C(3,4,3); C.setRandom();
// Eigen::array<Eigen::IndexList<int,int,int>,1> idx =
// {Eigen::IndexList<int,int,int>(1,0,0)};
// also does not seem to be the way
Eigen::array<int,3> idx({0,0,1});
Eigen::Tensor<double, 4> D = B.contract(C, idx);
Я просто хотел бы заключить контракт по последнему измерению B и первому измерению C .Но я не понимаю, как работает система, и в документации приведен только пример для 2D-тензоров.
//the first element of IDXPair is the choosen index in B and the second the idx for C
Eigen::array<Eigen::IndexPair<int>,1> idx = {Eigen::IndexPair<int>(2,0)};
Здесь второй индекс будет умножен на ноль второго тензора.