import numpy as np
data = np.array([[3, 4, 1, 6, 4],
[2, 3, 5, 4, 0],
[3, 3, 1, 0, 0],
[5, 5, 6, 2, 2],
[0, 2, 3, 3, 3],
[0, 0, 0, 6, 6]])
U,sigma,Vt = np.linalg.svd(data)
print('U\n', U)
print('sigma\n', sigma)
print('Vt\n', Vt)
sig3 = np.mat([[sigma[0], 0, 0],
[0, sigma[1], 0],
[0, 0, sigma[2]]])
print('原矩陣\n', U[:, :3] * sig3 * Vt[:3, :])
結果如下
U
[[-0.52185334 -0.24812789 0.48984775 0.4264698 -0.25322737 -0.42444109]
[-0.41008428 0.25126051 -0.56167383 0.61120633 0.18603982 0.21222054]
[-0.17980752 0.30425963 0.52454643 0.01925764 -0.15280032 0.75909656]
[-0.54015341 0.50153948 0.04913253 -0.52105767 0.31806198 -0.2856815 ]
[-0.32134159 -0.1172619 -0.40642164 -0.344323 -0.76680699 0.10611027]
[-0.36351493 -0.71932926 -0.04278063 -0.23263719 0.43446606 0.32513276]]
sigma
[ 15.89637219 8.57020627 3.81154183 2.44766976 1.15670966]
Vt
[[-0.35391208 -0.45296744 -0.43764876 -0.56597054 -0.39712423]
[ 0.37089115 0.34389166 0.46321936 -0.48404991 -0.54341678]
[ 0.56814214 0.33603938 -0.71321392 -0.17979403 0.15261733]
[-0.01866811 0.12392879 -0.26864569 0.62620239 -0.72110555]
[ 0.64346873 -0.74045811 0.11422254 0.14462956 -0.06087104]]
原矩陣
[[ 3.20796562e+00 3.65374805e+00 1.31388473e+00 5.38869763e+00
4.73490147e+00]
[ 1.88945744e+00 2.97394084e+00 5.37732233e+00 3.03205824e+00
1.09189553e+00]
[ 3.11461021e+00 2.86328574e+00 1.03285130e+00 -3.95424704e-03
2.32315836e-02]
[ 4.73945551e+00 5.43047445e+00 5.61535236e+00 2.74543419e+00
1.10271328e+00]
[ 5.55006143e-01 1.44767943e+00 2.87490069e+00 3.65603900e+00
2.33826920e+00]
[ -3.34005890e-01 4.42685438e-01 -2.10374623e-01 6.28388780e+00
5.61997960e+00]]