@@ -193,13 +193,14 @@ void multiply_tensors_with_static_order()
193
193
using value_t = float ; // std::complex<double>;
194
194
using matrix_t = matrix<value_t ,format_t >;
195
195
using vector_t = vector<value_t >;
196
+ using tensor_t = dynamic_tensor<value_t >;
196
197
using tensor2_t = fixed_rank_tensor<value_t ,2U >;
197
198
using tensor3_t = fixed_rank_tensor<value_t ,3U >;
198
- // using tensor4_t = fixed_rank_tensor<value_t,4>;
199
- // using shape_t = typename tensor_t::extents_type;
200
- // using shape2_t = typename tensor2_t::extents_type;
199
+ using tensor4_t = fixed_rank_tensor<value_t ,4 >;
200
+ using shape_t = typename tensor_t ::extents_type;
201
+ using shape2_t = typename tensor2_t ::extents_type;
201
202
using shape3_t = typename tensor3_t ::extents_type;
202
- // using shape4_t = typename tensor4_t::extents_type;
203
+ using shape4_t = typename tensor4_t ::extents_type;
203
204
204
205
// Tensor-Vector-Multiplications - Including Transposition
205
206
// dynamic_extents with static rank
@@ -296,41 +297,41 @@ void multiply_tensors_with_static_order()
296
297
// dynamic_extents with static rank
297
298
{
298
299
299
- // using perm_t = std::array<std::size_t,2>;
300
+ using perm_t = std::array<std::size_t ,2 >;
300
301
301
- // auto na = shape3_t{3,4,5};
302
- // auto nb = shape4_t{4,6,3,2};
303
- // auto nc = shape2_t{5,5};
304
- // auto A = tensor3_t(na,2.0F);
305
- // auto B = tensor4_t(nb,3.0F);
306
- // auto C = tensor2_t(nc,2.0F);
302
+ auto na = shape3_t {3 ,4 ,5 };
303
+ auto nb = shape4_t {4 ,6 ,3 ,2 };
304
+ auto nc = shape2_t {5 ,5 };
305
+ auto A = tensor3_t (na,2 .0F );
306
+ auto B = tensor4_t (nb,3 .0F );
307
+ auto C = tensor2_t (nc,2 .0F );
307
308
308
309
// C1(j,l) = T(j,l) + A(i,j,k)*A(i,j,l) + 5;
309
310
// Right now there exist no tensor other than dynamic_extents with
310
311
// dynamic rank so every tensor times tensor operator automatically
311
312
// to dynamic tensor
312
- // auto C1 = C + prod(A,A,perm_t{1,2}) + 5.0F;
313
+ auto C1 = C + prod (A,A,perm_t {1 ,2 }) + 5 .0F ;
313
314
std::cout << " % --------------------------- " << std::endl;
314
315
std::cout << " % --------------------------- " << std::endl << std::endl;
315
316
std::cout << " % C1(k,l) = T(k,l) + A(i,j,k)*A(i,j,l) + 5;" << std::endl << std::endl;
316
- // std::cout << "C1=" << tensor_t(C1) << ";" << std::endl << std::endl;
317
+ std::cout << " C1=" << tensor_t (C1) << " ;" << std::endl << std::endl;
317
318
318
319
319
320
// C2(k,l,m) = T(k,l,m) + A(i,j,k)*B(j,l,i,m) + 5;
320
321
// Similar Problem as above
321
- // tensor_t C2 = tensor_t(shape_t {na[2],nb[1],nb[3]},2.0F) + prod(A,B,perm_t{1,2},perm_t{3,1}) + 5.0F;
322
+ tensor_t C2 = tensor3_t ( shape3_t {na[2 ],nb[1 ],nb[3 ]},2 .0F ) + prod (A,B,perm_t {1 ,2 },perm_t {3 ,1 }) + 5 .0F ;
322
323
std::cout << " % --------------------------- " << std::endl;
323
324
std::cout << " % --------------------------- " << std::endl << std::endl;
324
325
std::cout << " % C2(k,l,m) = T(k,l,m) + A(i,j,k)*B(j,l,i,m) + 5;" << std::endl << std::endl;
325
- // std::cout << "C2=" << C2 << ";" << std::endl << std::endl;
326
+ std::cout << " C2=" << C2 << " ;" << std::endl << std::endl;
326
327
327
328
// C3(k,l,m) = T(k,l,m) + A(i,j,k)*trans(B(j,l,i,m),{2,3,1,4})+ 5;
328
329
// Similar Problem as above
329
- // tensor_t C3 = tensor_t(shape_t {na[2],nb[1],nb[3]},2.0F) + prod(A,trans(B,{2,3,1,4}),perm_t{1,2}) + 5.0F;
330
+ tensor_t C3 = tensor3_t ( shape3_t {na[2 ],nb[1 ],nb[3 ]},2 .0F ) + prod (A,trans (B,{2 ,3 ,1 ,4 }),perm_t {1 ,2 }) + 5 .0F ;
330
331
std::cout << " % --------------------------- " << std::endl;
331
332
std::cout << " % --------------------------- " << std::endl << std::endl;
332
333
std::cout << " % C3(k,l,m) = T(k,l,m) + A(i,j,k)*trans(B(j,l,i,m),{2,3,1,4})+ 5;" << std::endl << std::endl;
333
- // std::cout << "C3=" << C3 << ";" << std::endl << std::endl;
334
+ std::cout << " C3=" << C3 << " ;" << std::endl << std::endl;
334
335
335
336
}
336
337
}
0 commit comments