In [1]:
from scipy import linalg

In [40]:
import numpy as np
import numpy.random as npr
import pylab as pl
%matplotlib inline

In [171]:
X = np.zeros((5000,100))
for i in range(1,len(X)):
    X[i] = npr.randn(X.shape[1]) + X[i-1]

In [172]:
pl.scatter(X[:,0],X[:,1],c=range(len(X)),alpha=0.5,linewidth=0)
pl.colorbar()


Out[172]:
<matplotlib.colorbar.Colorbar at 0x10ed6b1d0>

In [173]:
t=100

In [174]:
pl.imshow(np.cov(X[t:].T,X[:-t].T),interpolation='none')
pl.colorbar()


Out[174]:
<matplotlib.colorbar.Colorbar at 0x11124f588>

In [175]:
pl.imshow(np.cov(X[t:].T),interpolation='none')
pl.colorbar()


Out[175]:
<matplotlib.colorbar.Colorbar at 0x12c56c240>

In [176]:
k = X.shape[1]

In [177]:
A = np.zeros((k*4,k*4))
A[k*2:,:k*2] = np.cov(X[:-t].T,X[t:].T)
A[:k*2,k*2:] = np.cov(X[t:].T,X[:-t].T)

In [178]:
A


Out[178]:
array([[    0.        ,     0.        ,     0.        , ...,
         -940.16091081,   -29.30927449,   477.64683002],
       [    0.        ,     0.        ,     0.        , ...,
         1235.3639709 ,   567.58554342,  -764.7432972 ],
       [    0.        ,     0.        ,     0.        , ...,
          311.46785691,    83.8975189 ,  -152.37902896],
       ..., 
       [ -986.6593279 ,   935.42719908,   272.70726911, ...,
            0.        ,     0.        ,     0.        ],
       [  -91.06734435,   620.59655256,   135.90846087, ...,
            0.        ,     0.        ,     0.        ],
       [  484.80903866,  -792.60461691,  -147.51460288, ...,
            0.        ,     0.        ,     0.        ]])

In [179]:
regx = 0.1
regy = 0.1

In [180]:
B = np.zeros((k*4,k*4))
B[:k*2,:k*2] = np.cov(X[t:].T,X[t:].T) + np.diag(np.ones(k*2))*regx
B[k*2:,k*2:] = np.cov(X[:-t].T,X[:-t].T) + np.diag(np.ones(k*2))*regy

In [181]:
B


Out[181]:
array([[  806.84057613,  -688.5583697 ,  -159.28142282, ...,
            0.        ,     0.        ,     0.        ],
       [ -688.5583697 ,  2167.72582811,   376.55227682, ...,
            0.        ,     0.        ,     0.        ],
       [ -159.28142282,   376.55227682,   164.80475448, ...,
            0.        ,     0.        ,     0.        ],
       ..., 
       [    0.        ,     0.        ,     0.        , ...,
         1555.43246332,   135.17956251,  -653.39626953],
       [    0.        ,     0.        ,     0.        , ...,
          135.17956251,   282.5213911 ,  -159.92034435],
       [    0.        ,     0.        ,     0.        , ...,
         -653.39626953,  -159.92034435,   490.35123959]])

In [182]:
vals,vecs = linalg.eigh(A,B)

In [183]:
pl.plot(vals)


Out[183]:
[<matplotlib.lines.Line2D at 0x12c638828>]

In [ ]: