In [7]:
import numpy as np
import matplotlib.pyplot as pl
import seaborn as sn
%matplotlib inline
sn.set_style('dark')

Matrix compression and denoising


In [3]:
stI=np.load('../data/stokesI_sunspot.npy')
stI.shape


Out[3]:
(512, 512, 112)

In [8]:
pl.imshow(stI[0,:,:], aspect='auto')


Out[8]:
<matplotlib.image.AxesImage at 0x7c3e350>

In [51]:
U, Sigma, Vt = np.linalg.svd(stI[0,:,:])

In [23]:
pl.semilogy(Sigma)


Out[23]:
[<matplotlib.lines.Line2D at 0x8ec2bd0>]

In [52]:
S = np.zeros(stI[0,:,:].shape)
SigmaNew = Sigma.copy()
SigmaNew[15:] = 0.0
n = len(Sigma)
S[:n,:n] = np.diag(SigmaNew)

In [53]:
reconstructed = U.dot(S).dot(Vt)
pl.imshow(reconstructed, aspect='auto')


Out[53]:
<matplotlib.image.AxesImage at 0xa769410>

In [57]:
f, ax = pl.subplots(nrows=2, ncols=4, figsize=(17,8))
ax[0,0].imshow(stI[0,:,:], aspect='auto')
ax[1,0].imshow(stI[0,:,:]-stI[0,:,:], aspect='auto')
threshold = [1,7,35]
for i in range(3):
    S = np.zeros(stI[0,:,:].shape)
    SigmaNew = Sigma.copy()
    SigmaNew[threshold[i]:] = 0.0
    n = len(Sigma)
    S[:n,:n] = np.diag(SigmaNew)
    reconstructed = U.dot(S).dot(Vt)
    ax[0,i+1].imshow(reconstructed, aspect='auto')
    ax[0,i+1].set_title('Keeping {0}'.format(threshold[i]))
    ax[1,i+1].imshow(stI[0,:,:]-reconstructed, aspect='auto')



In [ ]: