나는 두 개의 텐서의 행렬 곱을 얻으려고합니다. 텐서의 하나가 곱 해지기 전에이 텐서의 하나가 바뀌어야합니다 (At*B
).Eigen에서 Tensor를 바꾸는 방법
지금까지 내가 eigen documentation에서 발견 한 바는 전치가없고 행렬 전치가없는 행렬 곱입니다.
저는 텐서 중 하나와 2 개의 텐서를 직접 계약하는 방법을 찾고 있습니다. 계약하기 전에 하나의 텐서를 이항시켜야합니다.
나는 두 개의 텐서의 행렬 곱을 얻으려고합니다. 텐서의 하나가 곱 해지기 전에이 텐서의 하나가 바뀌어야합니다 (At*B
).Eigen에서 Tensor를 바꾸는 방법
지금까지 내가 eigen documentation에서 발견 한 바는 전치가없고 행렬 전치가없는 행렬 곱입니다.
저는 텐서 중 하나와 2 개의 텐서를 직접 계약하는 방법을 찾고 있습니다. 계약하기 전에 하나의 텐서를 이항시켜야합니다.
나는 그것을 알아내어, 전치 효과는 셔플 방법을 사용하여 수행 할 수 있습니다.
Eigen::Tensor<int, 2> m(3, 5);
m.setValues(
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
});
Eigen::array<int, 2> shuffling({1, 0});
Eigen::Tensor<int, 2> transposed = m.shuffle(shuffling);
Eigen::Tensor<int, 2> original = transposed.shuffle(shuffling);
또한 직접 수축 사용할 수 있습니다
:
Eigen::Tensor<int, 2> A(3, 5);
Eigen::Tensor<int, 2> B(3, 5);
Eigen::array<int, 1> contraction_indices;
// This will contract the first dimension of A with the first dim of B,
// effectively computing At*B
contraction_indices[0] = {0, 0};
Eigen::Tensor<int, 2> Result = A.contract(B, contraction_indices);
을