Проверьте разложение SVD.Практически, она заменяет матрицу M новой матрицей Mk с более низким рангом.
Например,
import numpy as np
U, S, V = np.linalg.svd(lena_image)
Здесь Mk - скалярное произведение этих матриц.
Youможет рассматривать это как сжатие, которое сохраняет только самую важную информацию (извлечение функций)