Illusztrációk mátrixok szingulárisérték-felbontására
3x3-as szimmetrikus mátrix közelítése spektrálfelbontással
Spektrálfelbontás:
A = matrix(RDF, [[1,1,0],[1,0,1],[0,1,0]])
Lambda, Q = A.eigenmatrix_left()
A1 = Q.transpose()*Lambda*diagonal_matrix([1,0,0])*Q
A2 = Q.transpose()*Lambda*diagonal_matrix([0,1,0])*Q
A3 = Q.transpose()*Lambda*diagonal_matrix([0,0,1])*Q
pretty_print(A,LatexExpr("\\ =\\ "),n(Q.transpose(),digits=2),LatexExpr("\\,\\cdot\\,"),n(Lambda,digits=2),LatexExpr("\\,\\cdot\\,"),n(Q,digits=2))
#pretty_print(LatexExpr("\\ =\\ "),n(A1,digits=2),LatexExpr("\\ +\\ "),n(A2,digits=2),LatexExpr("\\ +\\ "),n(A3,digits=2))
#pretty_print(n(A1+A2+A3,digits=2))
A kapott közelítések vizualizálása:
kep = matrix_plot(A, vmin=0, vmax=1, colorbar=True, colorbar_orientation='horizontal')
kep_kozelites = matrix_plot(A2, vmin=0, vmax=1, colorbar=True, colorbar_orientation='horizontal')
graphics_array([kep,kep_kozelites])
8x8-as szimmetrikus mátrix közelítése spektrálfelbontással
A = matrix(RDF, [[0,1,1,1,1,1,1,0],[1,0,0,0,0,0,0,1],[1,0,0,1,0,0,0,1],[1,0,1,0,0,1,0,1],[1,0,0,0,0,1,0,1],[1,0,0,1,1,1,0,1],[1,0,0,0,0,0,0,1],[0,1,1,1,1,1,1,0]])
U, Szigma, V = A.SVD()
vagas = diagonal_matrix([1,0,0,0,0,0,0,0])
kep = matrix_plot(A, vmin=0, vmax=1)
kep_kozelites = matrix_plot(U*Szigma*vagas*V.transpose(), vmin=0, vmax=1)
graphics_array([kep,kep_kozelites])
98x100-as mátrix közelítése szingulárisérték-felbontással
Ez itt egy 98x100 pixeles szürkeárnyalatos kép mátrixa (6-féle szürkeárnyalattal):
A = matrix(RDF,
[[0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,3,3,4,4,2,2,2,3,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,1,1,],
[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,3,3,4,4,3,3,3,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,1,1,1,1,],
[1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,3,3,4,4,3,2,4,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,3,2,1,1,1,],
[1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,2,1,0,0,0,0,0,0,0,1,1,1,1,3,3,4,4,3,4,4,4,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,3,2,2,1,1,],
[1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,2,2,2,3,3,1,0,0,0,0,0,0,1,1,1,1,3,3,4,3,3,4,4,4,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,1,2,2,2,2,3,2,1,1,],
[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,1,0,0,0,0,1,1,1,1,1,3,3,4,3,4,4,4,3,4,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,2,1,2,],
[2,1,1,1,2,3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,4,4,4,3,4,3,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,],
[2,2,2,1,3,3,3,3,2,2,1,1,1,1,1,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,3,3,3,4,4,3,4,4,3,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,],
[3,3,2,1,3,3,3,3,2,2,2,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,0,1,1,1,1,2,2,2,2,2,3,3,3,4,4,3,4,4,4,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,],
[3,3,2,1,3,3,3,3,2,2,2,2,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,4,3,4,3,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,],
[3,3,3,1,3,3,3,2,2,2,2,2,2,1,1,1,1,1,2,3,3,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,3,3,4,4,3,3,3,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,1,],
[4,3,2,1,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,2,3,3,4,4,3,3,3,2,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,],
[4,3,2,1,2,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,2,3,3,4,4,4,4,4,3,3,3,3,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,],
[4,4,3,1,1,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,2,2,3,4,4,4,4,4,4,4,4,4,3,3,3,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,3,3,2,],
[4,4,3,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,2,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,2,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,3,3,],
[4,4,3,3,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,2,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,3,3,3,4,],
[4,3,3,3,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,3,3,3,3,],
[3,3,3,3,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,3,3,2,],
[3,3,3,3,3,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,],
[3,3,3,4,4,2,1,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,3,2,2,3,],
[3,3,3,4,4,3,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,3,3,3,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,3,3,2,3,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,3,3,],
[4,4,4,5,5,4,3,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,3,3,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,3,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,],
[4,4,4,5,5,4,3,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,1,1,1,1,2,2,1,1,1,1,2,3,2,3,4,4,],
[4,4,5,5,4,4,3,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,3,3,4,4,],
[4,5,5,4,4,3,4,2,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,2,3,3,3,4,],
[4,5,5,4,4,4,2,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,2,2,3,2,3,3,2,2,3,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,2,2,2,3,4,4,3,],
[5,5,4,4,4,3,2,1,1,2,1,1,1,2,1,1,1,1,2,3,3,3,3,3,3,3,2,2,2,2,3,3,3,2,3,3,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,3,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,3,4,4,3,2,2,],
[5,5,4,4,4,2,4,2,0,1,1,1,1,1,2,1,1,1,1,2,2,2,3,3,3,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,4,3,1,2,2,],
[5,4,4,4,3,3,4,3,1,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,3,2,2,2,2,2,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,3,3,2,3,3,2,3,2,],
[5,4,4,4,2,2,3,2,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,4,3,3,3,2,3,2,3,3,3,3,2,2,2,2,2,3,2,3,2,2,3,3,3,3,3,2,2,3,2,2,2,2,2,3,4,3,2,2,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,1,1,2,2,1,2,3,3,3,2,2,2,3,3,],
[5,4,4,4,2,1,1,1,1,2,2,1,1,1,1,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,3,2,3,3,3,2,3,3,3,3,2,2,2,2,3,2,2,3,3,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,1,1,1,2,2,2,1,3,3,3,2,2,3,3,2,3,],
[4,4,4,4,2,4,3,1,1,2,1,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,3,3,2,2,2,2,2,2,1,2,3,3,2,3,2,2,2,3,2,3,2,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,3,2,3,2,3,2,3,3,3,3,3,],
[4,4,4,4,2,4,4,2,2,3,2,1,2,2,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,2,1,2,3,2,3,3,3,2,3,2,2,2,2,2,2,2,3,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,1,1,1,1,1,1,1,1,2,3,3,2,3,2,2,3,3,3,3,],
[4,4,4,4,2,4,3,1,1,2,0,1,2,2,1,1,1,1,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,2,3,3,3,2,3,3,2,3,4,3,2,3,3,2,2,2,3,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,1,1,2,1,1,1,1,1,1,2,3,2,3,3,2,2,3,3,3,3,],
[4,4,4,4,3,2,1,1,2,0,0,1,2,1,1,1,1,1,1,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,3,3,3,2,4,3,2,3,4,2,2,2,2,2,2,2,3,4,3,2,3,3,2,2,2,2,3,3,2,2,3,2,2,1,1,1,2,2,2,2,2,1,1,2,1,2,4,3,3,3,3,3,3,3,],
[4,4,4,4,3,1,2,4,3,1,3,3,1,1,1,1,2,1,1,1,1,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,3,3,2,2,2,2,2,3,2,3,3,2,2,4,2,2,3,2,2,1,2,3,4,4,2,3,2,2,2,3,2,3,3,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,4,4,3,3,3,3,2,2,3,],
[4,4,4,4,4,2,3,4,3,2,4,2,1,1,1,2,1,1,1,1,1,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,3,4,4,3,2,2,2,2,2,2,3,2,3,3,2,2,4,2,2,3,2,1,1,3,2,4,4,2,2,3,3,2,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,3,2,2,2,3,3,],
[4,4,4,4,4,3,1,2,2,1,2,1,0,2,2,2,2,1,1,1,1,1,1,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,3,3,1,2,4,2,3,3,3,1,2,3,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,3,3,2,2,3,2,2,2,2,2,2,2,],
[4,4,4,4,4,4,3,1,0,0,0,0,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,3,2,1,2,2,2,2,2,3,3,2,2,2,3,3,3,3,2,1,2,3,2,3,4,1,2,2,3,2,2,2,1,2,1,3,2,3,1,2,2,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,],
[3,4,3,4,4,4,4,3,2,2,2,3,3,4,3,2,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,3,1,1,2,2,2,2,1,2,1,2,3,3,1,2,2,2,3,3,3,3,1,3,2,3,2,2,1,2,2,4,3,1,2,2,2,1,2,1,2,2,2,2,2,2,2,1,2,2,2,3,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,],
[3,3,3,4,3,3,4,4,2,2,3,4,4,4,3,2,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,1,2,2,2,2,2,2,1,3,4,2,1,2,2,2,3,3,3,2,1,3,3,2,1,2,1,2,3,4,3,2,1,1,2,2,2,1,2,2,1,2,1,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,2,2,2,],
[2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,1,2,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,2,2,1,2,2,2,2,2,2,3,4,3,2,2,2,2,3,3,2,2,1,3,2,1,1,2,1,2,3,3,2,2,1,2,2,2,2,1,2,1,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,],
[2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,2,2,3,2,3,2,3,2,1,2,3,2,2,2,1,2,2,1,1,2,2,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,],
[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,1,2,1,2,2,2,3,1,1,2,4,3,2,2,3,3,2,2,1,1,1,0,1,1,3,3,3,1,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,2,2,],
[1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,1,1,2,2,2,1,1,1,1,1,1,2,2,2,1,1,1,3,4,2,1,2,3,2,2,0,1,1,0,1,2,3,2,2,1,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,1,2,2,],
[2,2,2,2,2,2,2,1,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,2,2,2,1,1,1,2,4,3,1,2,2,2,1,0,0,0,0,1,3,3,1,1,1,2,2,2,2,1,1,1,1,2,2,2,3,2,2,1,1,1,2,2,1,1,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,],
[3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,2,2,1,2,2,1,1,1,1,1,2,2,2,1,1,1,1,3,4,2,1,2,1,1,0,0,0,0,1,2,2,1,1,1,2,2,3,2,1,1,1,1,2,2,3,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,],
[3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,2,2,2,1,1,1,1,2,3,3,1,1,1,0,0,0,0,0,0,1,1,1,1,1,2,2,3,2,1,1,1,1,2,2,2,1,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,],
[3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,3,2,2,2,1,1,1,1,2,3,2,1,1,1,1,1,3,3,1,1,1,0,0,0,0,0,0,1,1,1,1,1,2,3,3,2,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,],
[4,3,4,3,3,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,2,2,2,1,1,1,1,1,2,2,1,1,0,0,0,0,0,0,0,1,1,1,1,1,2,3,3,2,1,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,],
[3,3,3,3,4,3,3,4,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,2,2,1,1,1,2,1,2,2,1,1,1,1,2,3,3,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,2,3,3,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,],
[3,3,3,3,3,3,3,4,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,1,2,1,1,1,1,1,1,2,2,1,1,1,2,3,3,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,2,3,3,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,],
[3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,],
[3,3,4,3,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,2,2,2,1,1,0,0,0,0,0,0,0,1,1,1,1,2,1,3,3,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,3,3,2,2,3,3,3,2,2,2,2,2,2,3,2,2,2,],
[3,3,4,4,3,3,3,3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,3,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,3,3,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,2,],
[4,3,3,4,3,3,3,3,2,1,1,1,2,3,2,2,2,2,2,2,2,1,1,2,2,1,1,2,3,3,3,4,4,4,3,3,3,2,2,2,2,2,2,3,3,3,2,1,1,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,3,4,4,4,4,4,3,2,4,4,4,4,3,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,2,],
[4,4,4,4,4,3,2,1,1,1,1,1,2,2,3,2,2,2,2,2,2,3,3,3,2,2,2,4,4,4,4,4,4,4,4,4,4,4,3,2,2,2,2,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,2,2,3,4,4,4,5,4,3,2,3,3,4,4,3,2,1,1,1,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,],
[4,4,4,4,4,3,2,2,1,1,0,1,2,3,3,2,3,3,3,3,3,4,3,3,2,2,2,3,4,4,3,3,3,5,4,4,4,4,5,4,3,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,2,3,4,4,4,4,4,4,3,3,2,3,3,5,3,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,],
[5,4,4,4,4,3,2,2,1,1,0,1,1,2,3,3,3,3,4,3,3,3,3,2,1,1,1,3,4,3,3,3,4,5,4,4,4,4,4,4,4,3,2,2,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,1,2,3,4,4,4,4,4,4,4,3,3,2,2,3,4,3,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,3,],
[5,4,4,4,3,3,2,1,1,0,0,1,1,1,1,2,2,2,3,3,2,2,2,1,1,1,1,3,4,3,3,3,3,5,4,4,3,4,4,5,5,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,2,5,4,3,3,3,4,4,4,3,3,2,2,4,4,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,],
[4,4,4,4,3,2,2,1,1,0,0,1,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,3,4,3,3,3,3,4,3,3,3,3,3,5,4,5,4,2,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,3,5,4,3,3,3,3,4,3,3,3,2,3,4,3,1,1,1,2,2,3,2,2,2,2,1,2,3,2,2,2,2,2,3,3,2,3,3,3,2,],
[4,4,4,4,4,2,1,1,0,0,0,1,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,2,4,4,3,3,3,4,3,3,3,3,4,5,4,5,4,2,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,4,4,5,3,3,3,3,3,3,3,2,3,4,4,2,1,1,1,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,],
[4,4,4,3,2,2,2,1,0,0,0,0,1,1,1,1,1,1,1,2,1,2,3,3,2,1,1,1,3,4,3,3,3,3,3,3,2,3,4,5,4,5,4,3,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,2,4,5,5,4,3,3,3,3,3,2,3,4,4,3,1,1,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,],
[3,3,3,3,2,2,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,3,3,2,1,1,1,4,4,4,3,3,3,3,3,4,5,5,5,5,4,3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,4,4,4,5,4,4,3,3,3,4,4,4,3,2,1,2,2,3,4,3,2,2,2,2,3,2,1,1,2,3,2,3,3,2,3,3,3,3,2,2,],
[4,3,3,2,3,1,1,0,0,0,0,0,0,1,0,1,1,1,2,2,2,1,2,3,4,3,2,1,1,1,3,4,4,4,3,4,4,5,5,5,4,4,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,3,4,4,5,5,5,5,4,3,2,1,1,2,3,3,3,4,3,2,2,2,3,2,2,1,2,2,2,3,3,3,3,3,3,2,2,2,2,],
[3,3,3,3,3,2,0,0,0,0,0,0,0,0,1,1,1,2,2,2,1,1,2,3,4,4,3,2,1,1,1,2,3,4,4,4,4,4,3,3,3,4,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,2,1,2,2,2,3,2,1,1,1,2,2,3,4,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,3,3,3,2,3,3,3,2,],
[3,3,3,2,2,1,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,1,2,2,3,3,3,4,3,3,2,1,1,1,2,2,2,1,1,1,2,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,1,1,1,1,1,1,1,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,2,2,2,2,2,3,3,2,3,3,3,2,3,2,],
[3,4,3,2,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,1,1,2,3,3,4,3,4,3,3,3,2,1,1,1,1,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,2,2,3,3,3,3,3,2,3,3,],
[3,3,3,2,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,3,3,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,3,2,2,3,3,3,3,3,2,3,3,],
[3,3,3,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,3,3,3,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,3,3,3,2,2,2,1,1,1,1,1,2,2,2,2,3,2,2,3,2,2,3,3,3,3,3,],
[3,2,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,1,2,2,3,3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,3,3,3,2,2,2,1,1,1,1,1,1,1,2,2,3,3,2,2,3,2,3,3,3,2,3,3,],
[3,2,2,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,2,2,1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,2,3,3,3,3,3,2,],
[3,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,],
[2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,3,3,3,2,1,3,3,3,3,4,3,3,3,2,],
[2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,],
[3,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,],
[3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,2,2,3,3,2,2,3,3,3,3,3,3,2,2,3,],
[3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,2,3,3,3,4,3,3,3,3,3,3,2,2,3,],
[2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,3,3,2,3,2,3,4,3,2,3,3,3,3,2,2,3,],
[2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,2,3,3,3,2,2,2,2,2,3,2,1,0,0,0,0,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,2,2,3,],
[2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,3,2,3,3,3,3,2,2,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,2,3,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,3,2,2,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,4,4,2,2,2,3,3,3,3,3,3,2,3,3,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,4,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,2,3,3,3,2,3,4,2,2,3,3,4,3,3,3,3,2,4,3,],
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,3,4,4,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,2,1,1,2,2,3,1,2,3,2,2,3,3,2,3,3,3,3,4,3,3,3,2,3,4,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,4,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,1,1,3,2,1,1,1,2,2,3,4,3,2,2,3,2,2,3,3,3,3,3,3,3,3,2,4,],
[2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,3,3,3,4,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,1,1,3,4,3,3,2,2,2,3,3,2,3,2,3,2,3,2,3,3,2,2,2,2,2,2,2,],
[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,4,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,2,4,1,0,1,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,3,1,0,1,3,3,2,2,2,2,2,2,1,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,],
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,3,1,0,1,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3,2,2,],
[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,1,0,0,2,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,],
[2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,0,0,2,3,3,2,3,3,2,2,2,2,3,2,2,3,2,2,2,1,2,2,2,2,3,2,],
[1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,0,0,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,3,],
[2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,0,0,1,3,3,2,2,1,2,2,2,2,3,2,2,2,3,2,2,3,2,2,3,2,2,2,],
[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,0,0,2,3,3,3,2,2,2,1,2,2,3,3,2,2,2,3,2,2,2,2,3,2,1,2,],
[2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,2,3,3,3,2,3,2,2,2,2,3,2,3,2,2,3,2,2,2,2,3,3,3,2,],
[1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,2,3,3,2,2,3,3,2,2,3,3,2,2,3,2,2,2,2,3,3,2,2,3,2,],
[2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,2,3,3,1,3,3,2,3,3,3,3,2,2,2,2,2,2,2,3,3,2,2,3,1,]
])
A.nrows(), A.ncols()
A kép közelítése a mátrix szingulárisérték-felbontásának első néhány tagjával:
U, Szigma, V = A.SVD()
vagas = zero_matrix(RDF, nrows=100)
for i in range(1): vagas[i,i]=1
kep = matrix_plot(A, vmin=0, vmax=5)
kep_kozelites = matrix_plot(U*Szigma*vagas*V.transpose(), vmin=0, vmax=5)
graphics_array([kep_kozelites])
Borok termőhelyének meghatározása főkomponens-analízissel
Az $M$ mátrix 178 minta 3 tulajdonságát tartalmazza (fenol-, flavonoid- és alkoholtartalom):
from sklearn.datasets import load_wine
import numpy as np
wine = load_wine()
X = wine.data # shape (178, 13)
y = wine.target # values: 0, 1, 2 (three wine cultivars)
n = len(y)
cols = [5,6,0] # total phenols, flavonoids, alcohol
X = X[:, cols]
y = y
M = matrix(X).transpose()
pretty_print("M =",M)
A mátrix oszlopai 178 pontot adnak a 3-dimenziós térben (mindegyik pont egy mintának felel meg):
a = M[0]; b = M[1]; c = M[2]
points = [((a[i],b[i],c[i]),'brown') for i in range(n)]
P = sum(list_plot([pt[0]], color=pt[1], size=40) for pt in points)
show(P,frame=False)
A borok 3 termőhelyről származnak, az alábbi ábrán eszerint vannak színezve a pontok:
colors = {0:'red',1:'cyan',2:'green'}
points_colored = [((a[i],b[i],c[i]),colors[y[i]]) for i in range(n)]
P_colored = sum(list_plot([pt[0]], color=pt[1], size=40) for pt in points_colored)
show(P_colored,frame=False)
Az első két szinguláris vektor által kifeszített síkra vetítjük a pontokat:
X = X - X.mean(axis=0)
M = matrix(X).transpose()
Ut, Szigma, Vt = M.SVD()
U = Ut.transpose()
V = Vt.transpose()
a = (U*M)[0]
b = (U*M)[1]
points = [((a[i],b[i]),'brown') for i in range(n)]
P = sum(list_plot([pt[0]], color=pt[1], size=120) for pt in points)
show(P)
Ugyanez a termőhelyek szerint színezett pontokkal:
a = (U*M)[0]
b = (U*M)[1]
points_colored = [((a[i],b[i]),colors[y[i]]) for i in range(n)]
P_colored = sum(list_plot([pt[0]], color=pt[1], size=120) for pt in points_colored)
show(P_colored)
Kézzel írt számjegyek felismerése főkomponens-analízissel
Az $M$ mátrix minden oszlopa 64 pixelt tartalmaz, amelyek egy-egy kézzel írt számjegyet ábrázolnak:
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
import numpy as np
digits = load_digits()
X = digits.data # shape: (1797, 64)
y = digits.target # labels 0–9
digits_to_keep = [5, 6, 9]
#digits_to_keep = [0,1,2,3,4,5,6,7,8,9]
mask = np.isin(y, digits_to_keep)
X_small = X[mask]
y_small = y[mask]
M = matrix(X_small).transpose()
pretty_print("M =",M)
Az első néhány számjegy így fest:
for i in range(10):
plt.figure()
plt.imshow(X_small[i].reshape(8, 8), cmap='gray')
plt.axis('on')
plt.show()
Az $M$ mátrix egy (nagy) ponthalmazt ad meg a 64-dimenziós térben. Ezt vetítjük az első két szinguláris vektor által kifeszített síkra:
Xc = X_small - X_small.mean(axis=0)
M = matrix(Xc).transpose()
Ut, Szigma, Vt = M.SVD()
U = Ut.transpose()
V = Vt.transpose()
a = (U*M)[0]
b = (U*M)[1]
c = (U*M)[2]
#a = M[42]; b = M[34]; c = M[29]
points = [((a[i],b[i]),'brown') for i in range(len(y_small))]
P = sum(list_plot([pt[0]], color=pt[1], size=40) for pt in points)
show(P)
Az alábbi ábrán a leírt számjegyek szerint vannak színezve a pontok:
colors = {0:'yellow',1:'pink',2:'brown',3:'grey',4:'orange',5:'red',6:'green',7:'cyan',8:'magenta',9:'blue'}
points_colored = [((a[i],b[i]),colors[y_small[i]]) for i in range(len(y_small))]
P_colored = sum(list_plot([pt[0]], color=pt[1], size=40) for pt in points_colored)
show(P_colored)
Az első három szinguláris vektor által kifeszített altérre vetítjük a pontokat:
points = [((a[i],b[i],c[i]),'brown') for i in range(len(y_small))]
P = sum(list_plot([pt[0]], color=pt[1], size=300) for pt in points)
show(P,frame=False)
Ugyanez a számjegyek szerint színezett pontokkal:
points_colored = [((a[i],b[i],c[i]),colors[y_small[i]]) for i in range(len(y_small))]
P_colored = sum(list_plot([pt[0]], color=pt[1], size=300) for pt in points_colored)
show(P_colored,frame=False)
Mik a legfontosabb pixelek?
for i in range(64): print(i,"-->",U[0][i])