张量收缩,我如何选择应该收缩的指标?
Tensor-contraction, how do i choose the indexes which should be contracted over?
我想用 Eigen::Tensor 模块执行简单的 Tensorcontractions,但到目前为止,我不明白你处理正确尺寸的方式。
这是我当前的代码:
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 的第一个维度。但我不明白系统是如何工作的,文档只给你一个二维张量的例子。
//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)};
此处第二个索引将乘以第二个张量的第零个。
IndexPair 代表的正是所说的:张量维度中的第一个索引映射到第二个张量中的第二个索引。
IdxPair(a,b) => A(1,2,3,4,x) * B(x,5,6,7,8,9) 其中a是最后一个维度的索引,在这种情况下,x 和 b 是第二个张量中维度的索引
我想用 Eigen::Tensor 模块执行简单的 Tensorcontractions,但到目前为止,我不明白你处理正确尺寸的方式。
这是我当前的代码:
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 的第一个维度。但我不明白系统是如何工作的,文档只给你一个二维张量的例子。
//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)};
此处第二个索引将乘以第二个张量的第零个。
IndexPair 代表的正是所说的:张量维度中的第一个索引映射到第二个张量中的第二个索引。
IdxPair(a,b) => A(1,2,3,4,x) * B(x,5,6,7,8,9) 其中a是最后一个维度的索引,在这种情况下,x 和 b 是第二个张量中维度的索引