2016-11-12 7 views
0

私は基本的にのように見える固有C++の機能が欲しい:どのように2つのテンソルを掛けて、アイゲンの3番目のテンソルで収縮させますか?

単にbとcを取り、座標ごとにそれらを乗算(彼らは同じ寸法である)と、その後の結果と契約
void multiplyAndContract(Tensor& a, Tensor& b, Tensor &c) 

をbとcは乗算されます(たとえば、b * cとaの両方の最初の次元で)。

bおよびcは、一般にベクトルの次元(つまり、テンソルのランク1)であることになります。

私はEigenとテンソルを持つ座標系の乗算をどのように行うのかよくわかりません(cwiseProductはありませんが、行列のようです)、それを行う方法もわかりません一時的テンソルを作成する限り最も効率的です。

私はコードのいくつかの例を得ることができて喜んで、それは完全に機能する必要はありませんが、それを行う方法の単なる参考資料です。

答えて

0

単純に係数の乗算に*演算子を使用できます。

Tensor a; 
Tensor b; 
Tensor c; 
Eigen::array<Eigen::DenseIndex, 1> contraction_pair; 
contraction_pair[0] = Eigen::IndexPair<Index>(0, 0); 
Tensor result = (b * c).contract(a, contraction_pair); 
関連する問題