20 lines
467 B
Python
20 lines
467 B
Python
from scipy import misc
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
from numpy import linalg
|
|
|
|
img = misc.face()
|
|
img_array = img / 255
|
|
img_array_transposed = np.transpose(img_array, (2, 0, 1))
|
|
|
|
U, s, Vt = linalg.svd(img_array_transposed)
|
|
|
|
Sigma = np.zeros((3, 768, 1024))
|
|
for j in range(3):
|
|
np.fill_diagonal(Sigma[j, :, :], s[j, :])
|
|
|
|
k = 10
|
|
|
|
approx_img = U @ Sigma[..., :k] @ Vt[..., :k, :]
|
|
plt.imshow(np.transpose(approx_img, (1, 2, 0)))
|