tensorly.tenalg.proximal.soft_thresholding

soft_thresholding(tensor, threshold)[source]

Soft-thresholding operator

sign(tensor) * max[abs(tensor) - threshold, 0]
Parameters:

tensor : ndarray

threshold : float or ndarray with shape tensor.shape

  • If float the threshold is applied to the whole tensor
  • If ndarray, one theshold is applied per elements, 0 values are ignored
Returns:

ndarray

thresholded tensor on which the operator has been applied

See also

inplace_soft_thresholding
Inplace version of the soft-thresholding operator
svd_thresholding
SVD-thresholding operator

Examples

Basic shrinkage

>>> import tensorly.backend as T
>>> from tensorly.tenalg.proximal import soft_thresholding
>>> tensor = T.tensor([[1, -2, 1.5], [-4, 3, -0.5]])
>>> soft_thresholding(tensor, 1.1)
array([[ 0. , -0.9,  0.4],
       [-2.9,  1.9,  0. ]])

Example with missing values

>>> mask = T.tensor([[0, 0, 1], [1, 0, 1]])
>>> soft_thresholding(tensor, mask*1.1)
array([[ 1. , -2. ,  0.4],
       [-2.9,  3. ,  0. ]])