Source code for tensorly.tenalg.core_tenalg.tensor_product

import tensorly as tl

[docs]def batched_tensor_dot(tensor1, tensor2): """Returns a generalized outer product of the two tensors Parameters ---------- tensor1 : tensor of shape (n_samples, J1, ..., JN) tensor2 : tensor of shape (n_samples, K1, ..., KM) Returns ------- outer product of tensor1 and tensor2 of shape (n_samples, J1, ..., JN, K1, ..., KM) """ shape_1 = tl.shape(tensor1) s1 = len(shape_1) - 1 shape_2 = tl.shape(tensor2) s2 = len(shape_2) - 1 n_samples = shape_2[0] if n_samples != shape_1[0]: raise ValueError(f'tensor1 has a batch-size of {s1[0]} but tensor2 has a batch-size of {n_samples}' 'tensor1 and tensor2 should have the same batch-size.') shape_1 = shape_1 + (1, )*s2 shape_2 = (n_samples, ) + (1, )*s1 + shape_2[1:] return tl.reshape(tensor1, shape_1) * tl.reshape(tensor2, shape_2)
[docs]def tensor_dot(tensor1, tensor2): """Returns a generalized outer product of the two tensors Parameters ---------- tensor1 : tensor of shape (J1, ..., JN) tensor2 : tensor of shape (K1, ..., KM) Returns ------- outer product of tensor1 and tensor2 of shape (J1, ..., JN, K1, ..., KM) """ shape_1 = tl.shape(tensor1) s1 = len(shape_1) shape_2 = tl.shape(tensor2) s2 = len(shape_2) shape_1 = shape_1 + (1, )*s2 shape_2 = (1, )*s1 + shape_2 return tl.reshape(tensor1, shape_1) * tl.reshape(tensor2, shape_2)