tensorly.tenalg.proximal.soft_thresholding

soft_thresholding(tensor, threshold)[source]

Soft-thresholding operator

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

Parameters:
tensorndarray
thresholdfloat or ndarray with shape tensor.shape
  • If float the threshold is applied to the whole tensor

  • If ndarray, one threshold is applied per elements, 0 values are ignored

Returns:
ndarray

thresholded tensor on which the operator has been applied

See also

svd_thresholding

SVD-thresholding operator

Examples

Basic shrinkage

>>> import tensorly.backend as T
>>> from tensorly.solvers.proximal import soft_thresholding
>>> tensor = tl.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 = tl.tensor([[0, 0, 1], [1, 0, 1]])
>>> soft_thresholding(tensor, mask*1.1)
array([[ 1. , -2. ,  0.4],
       [-2.9,  3. ,  0. ]])