In [9]:
import numpy as np

In [1]:
from PIL import Image

In [2]:
im = Image.open('london.png','r')
col,row =  im.size

In [3]:
col


Out[3]:
700

In [5]:
row


Out[5]:
467

In [7]:
im.mode


Out[7]:
'RGB'

In [10]:
data = np.zeros((row*col, 5))

In [11]:
data


Out[11]:
array([[ 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.]])

In [12]:
pixeles = im.load()

In [13]:
pixeles


Out[13]:
<PixelAccess at 0x24c9d1d8890>

In [14]:
pixeles[699,466]


Out[14]:
(24, 24, 24)

In [16]:
for i in range(col):
    for j in range(row):
        r,g,b =  pixeles[i,j]
        data[j*col + i,:] = r,g,b,j,i

In [17]:
data


Out[17]:
array([[  16.,   16.,   16.,    0.,    0.],
       [  16.,   16.,   16.,    0.,    1.],
       [  16.,   16.,   16.,    0.,    2.],
       ..., 
       [  34.,   34.,   34.,  466.,  697.],
       [  37.,   37.,   37.,  466.,  698.],
       [  24.,   24.,   24.,  466.,  699.]])

In [20]:
type(im)


Out[20]:
PIL.PngImagePlugin.PngImageFile

In [21]:
U, s, V = np.linalg.svd(data, full_matrices=False)

In [22]:
U


Out[22]:
array([[ -2.81071596e-05,  -9.75061020e-05,  -4.61939349e-04,
         -8.64710538e-01,   3.42342874e-01],
       [ -3.11298560e-05,  -9.14573648e-05,  -4.61067810e-04,
         -3.65061573e-01,  -9.24205503e-01],
       [ -3.41525524e-05,  -8.54086275e-05,  -4.60196272e-04,
          1.18098260e-05,   1.61529652e-05],
       ..., 
       [ -3.01121037e-03,   2.25668415e-04,   3.29495183e-03,
          1.13165265e-04,  -1.49499456e-04],
       [ -3.01950316e-03,   2.13434758e-04,   3.20920974e-03,
         -1.20772234e-05,   7.41201494e-05],
       [ -2.99968879e-03,   2.98707203e-04,   3.58540700e-03,
          2.05270935e-04,  -6.29410006e-05]])

In [23]:
s


Out[23]:
array([  2.72662737e+05,   9.33021920e+04,   5.41846261e+04,
         2.01118539e-11,   1.09659524e-12])

Considerese el sistema de ecuaciones $Ax=b$, donde $A$ es una matrix de $m\times n$ y $b\in\mathbb{R}^n$. Sea $\tilde{A}$ pseudoinversa de $A$. Si $z=\tilde{A}b$, entonces $z$ tiene las siguientes propiedades:

1- Si $A$ es invertible, entonces $z$ es la unica solucion del sistema que tiene norma minima. Es decir, $z$ es una solucion al sistema y si $y$ es cualquier (otra) solucion del sistema, entonces $||z||\leq ||y||$.

2- Si $A$ no es invertible, entonces $z$ la unica mejor aproximacion a la solucion que tiene minima norma. Es decir, para cualquier $y\in\mathbb{R}^n$ se cumple que $||Az-b||\leq ||Ay-b||$. Ademas, si $Az=Ay$ entonces $||z||\leq||y||$.