tensorly.parafac2_tensor.parafac2_to_slice

parafac2_to_slice(parafac2_tensor, slice_idx, validate=True)[source]

Generate a single slice along the first mode from the PARAFAC2 tensor.

The decomposition is on the form (A [B_i] C) such that the i-th frontal slice, X_i, of X is given by

X_i = B_i diag(a_i) C^T,

where diag(a_i) is the diagonal matrix whose nonzero entries are equal to the i-th row of the I \times R factor matrix A, B_i is a J_i \times R factor matrix such that the cross product matrix B_{i_1}^T B_{i_1} is constant for all i, and C is a K \times R factor matrix. To compute this decomposition, we reformulate the expression for B_i such that

B_i = P_i B,

where P_i is a J_i \times R orthogonal matrix and B is a R \times R matrix.

An alternative formulation of the PARAFAC2 decomposition is that the tensor element X_{ijk} is given by

X_{ijk} = \sum_{r=1}^R A_{ir} B_{ijr} C_{kr},

with the same constraints hold for B_i as above.

Parameters:
parafac2_tensorParafac2Tensor - (weight, factors, projection_matrices)
  • weights1D array of shape (rank, )
    weights of the factors
  • factorsList of factors of the PARAFAC2 decomposition
    Contains the matrices A, B and C described above
  • projection_matricesList of projection matrices used to create evolving
    factors.
Returns:
ndarray

Full tensor of shape [P[slice_idx].shape[1], C.shape[1]], where P is the projection matrices and C is the last factor matrix of the Parafac2Tensor.