2016-10-02 3 views
1

나는 두 개의 텐서의 행렬 곱을 얻으려고합니다. 텐서의 하나가 곱 해지기 전에이 텐서의 하나가 바뀌어야합니다 (At*B).Eigen에서 Tensor를 바꾸는 방법

지금까지 내가 eigen documentation에서 발견 한 바는 전치가없고 행렬 전치가없는 행렬 곱입니다.

저는 텐서 중 하나와 2 개의 텐서를 직접 계약하는 방법을 찾고 있습니다. 계약하기 전에 하나의 텐서를 이항시켜야합니다.

답변

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); 
또한 직접 수축 사용할 수 있습니다
2

:

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); 
관련 문제