2017-10-31 10 views

答えて

0

私はあなたの質問を理解したら、最初にBを(1,3,4)に変更して、ブロードキャストを使用して軸0に沿って値を複製することができます。これは非常に効率的かどうかは分かりません。

auto A = Tensor<float, 3>(2, 3, 4); 
A.setValues({ 
    { 
     {1,2,3,4}, 
     {5,6,7,8}, 
     {9,10,11,12}, 
    },{ 
     { 10,20,30,40 }, 
     { 50,60,70,80 }, 
     { 90,100,110,120 }, 
    } 
}); 

auto W = Tensor<float, 2>(3,4); 
W.setValues({ 
    { 1,2,3,4 }, 
    { 5,6,7,8 }, 
    { 9,10,11,12 } 
}); 


auto three_dims = Eigen::array<int, 3>({ 1,3,4 }); 
auto bcast = Eigen::array<int, 3>({ 2,1,1 }); 
auto X = W.reshape(three_dims).broadcast(bcast); 

auto Y = A*X; 

std::cout << Y << std::endl; 

プリント:

1 25 81 4 36 100 9 49 121 16 64 144 
10 250 810 40 360 1000 90 490 1210 160 640 1440 
関連する問題