张量收缩,我该如何选择应该收缩的指标?

时间:2019-02-25 14:10:34

标签: c++ eigen tensor eigen3

我想使用Eigen :: Tensor模块执行简单的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)};

这里第二个索引将乘以第二张量的零。

1 个答案:

答案 0 :(得分:0)

IndexPair恰好代表所表达的意思:张量维度中的第一个索引映射到第二张量中的第二个索引。

IdxPair(a,b)=> A(1,2,3,4,x)* B(x,5,6,7,8,9)其中a是最后一个维度的索引情况x和b是第二张量中维度的索引