Ну, об этом было написано тонны постов. Это не будет «еще один». Но я все равно реализовал это, просто для удовольствия. Я не буду объяснять теоретическую часть, но предложу несколько ссылок по этому поводу.

Почему важна СВД и стоит потратить время на ее понимание? Если вы хотите понять, как работает анализ основных компонентов (PCS) в машинном обучении или где-либо еще, вы должны понимать декомпозицию по сингулярным значениям (SVD) матрицы.

Хорошая демонстрация:
http://timbaumann.info/svd-image-compression-demo/

Немного чтения и видео (раньше в Беркли был классный текст, но теперь доступ ограничен):
http://fourier.eng.hmc.edu/e161/lectures/svdcompression.html

https://ocw.mit.edu/courses/mathematics/18-06-linear-алгебра-spring-2010/video-lectures/lecture-29-singular-value-decomposition/

http://math.arizona.edu/~brio/VIGRE/ThursdayTalk.pdf

и источник:

волшебство происходит в np.dot(), мы берем только приблизительные_ранки единичные значения и отбрасываем другие, так что сделайте некоторое сжатие.

Результат ниже, слева изображено исходное изображение в градациях серого с рангом, равным 440, справа изображено низкоранговое приближение с рангом, равным 50.

Полезно знать, что SVD — не лучший способ сжатия изображений.