In [1]:
import numpy as np
from ipalm import *
import matplotlib.pyplot as plt
import math

In [2]:
##### solve sparse PCA as test

### generate toy matrix to factorize

M=33 #dimensions
N=25 #dimensions
r=6 #rank of matrix


#subscript of 't' denotes true parameter used to generate toy data

p_sparse=0.25

#let's make these things sparse

U_t=np.random.normal(size=[M, r])
V_t=np.random.normal(size=[r, N])

sp_mask_inds=[np.random.choice( np.array([i for i in range(r)]),\
                               int(r*p_sparse)+1 )\
              for x in range(M)]

sp_mask_t=np.array([[1 if i in x else 0 for i in range(r)] for x in sp_mask_inds])


U_t=np.multiply(U_t, sp_mask_t)

U_t=np.divide(U_t, np.linalg.norm(U_t,axis=0))
V_t=np.divide(V_t, np.expand_dims(np.linalg.norm(V_t,axis=1),axis=1))

s_t=np.random.uniform(size=[r,])
s_t=sorted(s_t)

S_t=np.diag(s_t)

P_t=np.dot(np.dot(U_t,S_t),V_t)

plt.figure()
plt.subplot(1,3,1)
plt.imshow(U_t, interpolation='none')
plt.colorbar()
plt.subplot(1,3,2)
plt.imshow(S_t, interpolation='none')
plt.colorbar()
plt.subplot(1,3,3)
plt.imshow(V_t, interpolation='none')
plt.colorbar()

plt.figure()
plt.imshow(P_t, interpolation='none')
plt.colorbar()

plt.show()


/usr/lib/pymodules/python2.7/matplotlib/collections.py:548: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  if self._edgecolors == 'face':

In [5]:
### the iPALM algorithm
### no backtracking

### this specific problem
# solve 1/2*|| Y-Xa*Xb ||_F^2 + lam*||xa||_1 + lam/2*||xb||_2^2


### inputs

#inits

#functions
grad_a=lambda xs, opts: \
    np.dot(np.dot(xs[0].reshape([opts['M'], opts['r']]),\
                  xs[1].reshape([opts['r'], opts['N']]))-opts['Y'],\
           xs[1].reshape([opts['r'], opts['N']]).T).\
    reshape([opts['M']*opts['r'],])

grad_b=lambda xs, opts: \
    np.dot(xs[0].reshape([opts['M'], opts['r']]).T,\
           np.dot(np.reshape(xs[0], [opts['M'], opts['r']]),\
                  np.reshape(xs[1], [opts['r'], opts['N']]))-opts['Y']).\
    reshape([opts['r']*opts['N'],])

prox_a=lambda v, t, opts: \
    np.sign(v)*np.maximum(0.0, np.abs(v)-opts['lam']/t)

prox_b=lambda v, t, opts: \
    np.divide(v, (1.0+opts['lam']/t))

#optimization params
nit=1e3 #max iterations before termination
tol=1e-4 #error threshold for termination

opts={}
opts['lam']=0.00001;
opts['r']=r
opts['M']=M
opts['N']=N
opts['Y']=P_t

opts['nit']=nit
opts['tol']=tol

grads=[grad_a, grad_b]
proxs=[prox_a, prox_b]

lip_a = lambda xs, opts: np.power(np.linalg.norm(xs[1]), 2)
lip_b = lambda xs, opts: np.power(np.linalg.norm(xs[0]), 2)

lips=[lip_a, lip_b]
opts['lips']=lips
xs2 = ipalm(grads, proxs, [M*r, r*N], opts)
#print(xs2)
[xa2, xb2] = xs2
print(opts)

P_h=np.dot(xs2[0].reshape([M,r]),\
           xs2[1].reshape([r,N]))


{'lam': 1e-05, 'M': 33, 'N': 25, 'lips': [<function <lambda> at 0x7f13f52a6cf8>, <function <lambda> at 0x7f13f52a6de8>], 'r': 6, 'tol': 0.0001, 'Y': array([[ -7.22150534e-03,  -4.44401117e-02,  -5.57685252e-02,
          2.71912318e-02,  -1.44964233e-02,   2.93291469e-02,
          1.52005890e-02,   6.89743645e-02,  -1.68755497e-02,
          2.74821679e-02,   4.09503149e-02,   1.89003119e-02,
          6.30642603e-02,   2.88521842e-02,  -3.59443250e-02,
         -4.79741294e-02,  -1.45904248e-02,   2.17838125e-02,
         -3.11517982e-02,  -8.36387737e-03,  -3.62585137e-02,
          1.66079591e-02,  -1.78310243e-02,  -9.28109179e-03,
          5.90349303e-02],
       [ -2.84364240e-01,  -8.71773416e-02,   3.98869852e-01,
          6.08340171e-02,  -1.40994414e-01,   2.92210478e-02,
          1.20617874e-01,   1.76351948e-01,  -4.00006700e-01,
         -1.22218682e-01,  -6.29595421e-02,  -1.41435661e-02,
          3.73470723e-02,  -2.20247484e-01,  -1.00982226e-01,
          2.10077916e-01,   4.13315165e-02,  -4.54818109e-02,
          4.48305573e-02,   7.11898700e-02,  -6.66158107e-02,
         -1.11387040e-02,   9.50148556e-02,   7.37271133e-02,
         -7.28937934e-03],
       [ -3.62423742e-02,   3.98227331e-02,   2.31807085e-02,
         -7.39635376e-03,  -4.59281036e-02,  -4.98480953e-02,
         -1.84183428e-02,   2.15695537e-02,  -2.17401766e-02,
          1.08169069e-02,   3.53321040e-02,   3.02919384e-02,
          1.40078734e-02,   3.93449390e-03,  -6.39403027e-03,
         -9.94075941e-03,   2.01344339e-02,  -2.02971795e-03,
          1.62850356e-02,  -1.52302142e-02,   1.37600892e-02,
         -2.75840669e-02,  -1.23873625e-02,   8.57365825e-02,
         -6.52514314e-02],
       [  2.36923088e-02,  -2.27100112e-02,  -2.29043779e-02,
          2.44047942e-02,   3.42545750e-02,   6.73328208e-03,
          5.68933060e-03,  -4.58746371e-03,   1.17161542e-02,
         -4.57732309e-03,  -3.04567514e-02,  -1.08082395e-02,
         -2.13793760e-02,  -2.52753808e-02,   1.17846614e-02,
          2.95635744e-02,   6.90951836e-03,  -2.08541699e-02,
         -3.46964211e-02,   2.51475088e-02,   1.19777786e-02,
          7.38366920e-03,   1.87037920e-02,  -3.98533558e-02,
          3.91902688e-03],
       [ -7.16745894e-02,   9.52038682e-02,   5.29006372e-02,
          2.06371743e-02,  -3.75940388e-02,   3.74807976e-02,
         -6.88430947e-02,  -1.17911104e-01,   2.64411367e-03,
         -4.86050063e-03,  -9.54012794e-02,   8.29906059e-02,
         -2.32304126e-01,  -5.70662794e-03,  -3.04453116e-02,
          2.38498342e-02,  -7.29845271e-02,  -6.84666852e-02,
          9.49345798e-02,   1.84046900e-02,  -6.97938030e-02,
          5.35910862e-02,  -4.47558744e-02,  -1.24709324e-01,
          6.37760184e-02],
       [  5.72446641e-02,  -6.83794201e-02,  -3.70178241e-02,
         -1.88859107e-02,   3.00091576e-02,  -2.47193903e-02,
          5.43727423e-02,   8.29358914e-02,  -4.41696887e-03,
          6.34609431e-04,   6.75583342e-02,  -6.66432872e-02,
          1.67137359e-01,   3.09851089e-03,   2.30123543e-02,
         -1.61566476e-02,   5.23601493e-02,   5.22756112e-02,
         -6.65693913e-02,  -1.46254013e-02,   4.63436129e-02,
         -3.62870824e-02,   3.54253644e-02,   8.73456848e-02,
         -4.09450570e-02],
       [  2.15469229e-03,   1.81185469e-02,  -2.04698243e-02,
          1.21408249e-02,  -1.70444423e-02,   2.40346199e-02,
          1.92897339e-02,   1.64150638e-02,  -5.23810108e-02,
          4.10961718e-03,  -4.16158912e-03,   8.32532560e-03,
         -4.55700516e-02,  -3.04409391e-03,  -3.46481085e-02,
         -1.04846344e-02,  -2.17587614e-02,  -2.31810552e-04,
          1.20506570e-02,  -5.98860646e-03,  -8.12428595e-02,
          4.20821124e-02,  -1.15794787e-03,  -3.83188652e-02,
          7.43564753e-02],
       [ -4.47165363e-02,   2.08933484e-02,   1.10498014e-02,
          1.93645303e-02,  -1.97709106e-02,   2.38182308e-02,
         -4.02544305e-02,  -3.83729329e-02,   1.93036392e-02,
          9.38942099e-03,  -2.98743918e-02,   5.17312323e-02,
         -7.36988048e-02,   1.32493627e-02,  -1.79372888e-02,
         -6.15992867e-03,  -3.71320993e-02,  -2.67588121e-02,
          3.06725691e-02,   8.96475871e-03,  -1.63979242e-02,
          1.70807822e-02,  -3.35263694e-02,  -5.47975006e-02,
          2.82863623e-02],
       [ -1.57597014e-02,   2.44324530e-03,   2.54420032e-02,
         -5.21432396e-03,   6.26855270e-03,  -1.16044393e-02,
         -2.85994404e-02,  -3.43302875e-02,   4.27606687e-02,
         -3.57762983e-03,  -1.39449445e-02,   9.70198081e-03,
         -6.02330819e-03,   2.12420756e-03,   2.14393120e-02,
          1.19053438e-02,   3.28518186e-03,  -1.24488508e-02,
          7.67864075e-03,   8.21272261e-03,   5.18160871e-02,
         -2.35336531e-02,  -8.14417465e-03,   6.94537011e-03,
         -4.67773443e-02],
       [  4.80113406e-02,   6.09718073e-02,   2.37437813e-02,
         -2.85346705e-02,   6.98514965e-03,  -1.66748731e-02,
          4.46217870e-02,  -2.26126349e-02,  -7.55038934e-02,
         -3.28314769e-02,  -2.86061358e-02,  -5.12626110e-02,
         -8.04958269e-02,  -4.83357792e-02,   3.41440539e-03,
          4.39636261e-02,   1.41621810e-02,  -3.35292897e-03,
          2.86703334e-02,  -6.80889920e-03,  -6.77532715e-02,
          3.05614292e-02,   4.59830330e-02,  -2.44267841e-03,
          2.16676861e-02],
       [ -1.82807599e-02,   2.01726341e-02,   7.50203065e-03,
          1.44429228e-02,  -1.37323528e-02,  -4.76186454e-02,
         -1.95720533e-02,   1.08927654e-02,  -2.55899357e-03,
          6.11534269e-03,   4.78257595e-03,   2.31051843e-02,
         -7.04273685e-03,  -1.94923611e-02,   8.99639921e-03,
          2.02412082e-02,   2.80897662e-02,  -2.44773029e-02,
         -1.45043029e-02,   9.80763348e-03,   3.63195094e-02,
         -2.64084991e-02,   3.25547617e-03,   5.23645349e-02,
         -7.35015950e-02],
       [  3.28423722e-02,   1.80134839e-02,  -3.99456992e-02,
         -1.51148756e-02,   2.78929919e-02,  -1.52523403e-02,
         -4.22071731e-02,  -5.83384921e-02,   9.74007975e-02,
          1.49895330e-02,  -3.18172836e-03,   8.81922569e-03,
         -1.39583197e-02,   3.48250881e-02,   3.46113442e-02,
         -2.12185717e-02,  -3.16195958e-03,  -3.74308434e-03,
          6.09045795e-04,  -4.33875532e-03,   5.30013418e-02,
         -1.75581879e-02,  -2.03967931e-02,  -5.68207180e-03,
         -3.86252960e-02],
       [  7.47508862e-02,  -8.26405008e-02,  -5.69088523e-02,
          1.36083031e-02,   6.63733524e-02,  -7.11047806e-03,
          5.04938958e-02,   5.74793764e-02,   1.18076122e-02,
         -5.67421285e-03,   1.49306806e-02,  -6.69352943e-02,
          1.04758902e-01,  -2.65844682e-02,   3.18692942e-02,
          2.18122223e-02,   4.68090451e-02,   1.72928533e-02,
         -9.26766261e-02,   1.84813579e-02,   4.84420091e-02,
         -1.74093613e-02,   4.99280455e-02,   1.51288173e-02,
         -2.15469630e-02],
       [  8.09032587e-02,  -7.21874518e-02,  -7.56861556e-02,
         -1.01708183e-02,   2.01431094e-02,  -1.29875490e-02,
          9.71048373e-02,   1.38348968e-01,  -6.90984877e-02,
          6.66336115e-03,   9.12014388e-02,  -8.10034518e-02,
          1.80880440e-01,  -2.00395669e-03,  -7.54028153e-03,
         -3.24882063e-02,   5.20150919e-02,   7.01576404e-02,
         -8.17638667e-02,  -2.64327212e-02,  -2.62957051e-02,
         -4.81193313e-03,   4.91505778e-02,   8.51355486e-02,
          2.04613704e-02],
       [  2.94384050e-02,   3.85131311e-02,   2.39297636e-02,
         -2.33579921e-02,   9.17437493e-03,  -7.69365276e-03,
          2.27212425e-02,  -2.93640595e-02,  -3.47231443e-02,
         -2.43008422e-02,  -2.50089064e-02,  -3.45932851e-02,
         -5.50243402e-02,  -2.84943463e-02,   8.60522682e-03,
          3.05254026e-02,   6.14915050e-03,  -2.80492703e-03,
          2.43518888e-02,  -3.17444179e-03,  -3.25255905e-02,
          1.62327793e-02,   2.73584383e-02,  -7.58143361e-03,
          9.45437490e-03],
       [  5.53910008e-03,  -5.46355525e-03,  -4.99541780e-03,
          4.79805620e-03,   7.81227895e-03,   2.77324308e-03,
          1.62468235e-03,  -1.51371732e-03,   2.85490920e-03,
         -1.18581054e-03,  -6.77925541e-03,  -2.94403127e-03,
         -4.43150214e-03,  -4.85625752e-03,   2.40247322e-03,
          5.84202865e-03,   6.84492945e-04,  -3.84683205e-03,
         -6.99634794e-03,   5.17476404e-03,   1.82761944e-03,
          2.22011854e-03,   3.88092754e-03,  -1.00685121e-02,
          2.71282044e-03],
       [ -6.06891417e-02,  -2.64657232e-02,  -2.98625947e-02,
          5.29927157e-02,  -3.28336631e-02,  -5.02900036e-02,
         -4.96274468e-02,   6.45582680e-02,   3.24047576e-02,
          4.26261478e-02,   4.46856179e-02,   7.59504458e-02,
          6.78262925e-02,   1.23415264e-02,  -5.67566551e-03,
         -1.80226904e-02,   2.84405745e-02,  -2.56297394e-02,
         -5.51260184e-02,   1.52817117e-02,   7.91941984e-02,
         -5.13171933e-02,  -3.09606925e-02,   7.89674342e-02,
         -9.89245992e-02],
       [ -4.73553593e-02,   5.07443142e-02,   3.32958435e-02,
         -1.72572316e-02,  -6.16524444e-02,  -5.51020235e-02,
         -2.16017629e-02,   2.44924369e-02,  -2.74379996e-02,
          1.31660737e-02,   4.90214259e-02,   3.60906520e-02,
          2.30452470e-02,   1.39497115e-02,  -1.13052427e-02,
         -2.19380476e-02,   1.85204951e-02,   5.95404752e-03,
          3.06100268e-02,  -2.57943774e-02,   9.84191323e-03,
         -3.19105733e-02,  -2.03007513e-02,   1.05742672e-01,
         -7.02296634e-02],
       [  4.55152162e-02,  -4.26629813e-02,  -4.62527824e-02,
          5.25681309e-02,   6.70351404e-02,   5.42598151e-03,
          9.08503329e-03,  -6.04985009e-03,   2.17829403e-02,
         -8.06911081e-03,  -6.06479898e-02,  -1.81512491e-02,
         -4.46218738e-02,  -5.51508104e-02,   2.48483380e-02,
          6.34939288e-02,   1.91038555e-02,  -4.65055319e-02,
         -7.36408631e-02,   5.27232097e-02,   2.91022439e-02,
          1.10917894e-02,   3.90123727e-02,  -7.18584092e-02,
         -3.72264653e-03],
       [  1.63043115e-02,  -2.52767685e-03,  -2.63212059e-02,
          5.39451604e-03,  -6.48517591e-03,   1.20054555e-02,
          2.95877551e-02,   3.55166438e-02,  -4.42383548e-02,
          3.70126246e-03,   1.44268418e-02,  -1.00372535e-02,
          6.23145645e-03,  -2.19761408e-03,  -2.21801931e-02,
         -1.23167583e-02,  -3.39870832e-03,   1.28790474e-02,
         -7.94399256e-03,  -8.49653076e-03,  -5.36067025e-02,
          2.43469087e-02,   8.42561398e-03,  -7.18538219e-03,
          4.83938353e-02],
       [  2.26774398e-02,  -2.77222186e-02,  -1.19089332e-02,
         -1.13790921e-02,   1.45260273e-02,   9.29118952e-03,
          2.13164902e-02,   1.81855390e-02,   2.87955269e-03,
         -2.33935387e-03,   1.73911006e-02,  -2.77319593e-02,
          5.21594872e-02,   8.28242882e-03,   5.19996994e-03,
         -1.13980667e-02,   5.55401016e-03,   2.37292679e-02,
         -1.39847978e-02,  -7.37073620e-03,   4.41297042e-03,
         -2.90657960e-03,   8.78004585e-03,   7.34473798e-03,
          1.13078955e-02],
       [  1.44964242e-02,  -2.38621965e-02,  -4.87679038e-03,
          1.87156232e-02,   4.12461811e-02,   4.54677558e-03,
         -1.32500474e-02,  -3.21647790e-02,   4.46140400e-02,
         -8.17763260e-03,  -4.20006203e-02,  -6.73715029e-03,
         -2.51979710e-02,  -2.12444544e-02,   2.69267584e-02,
          3.61125149e-02,   5.61100043e-03,  -2.71438982e-02,
         -2.72354588e-02,   3.02849721e-02,   4.64020166e-02,
         -6.75731801e-03,   1.22720174e-02,  -4.21912926e-02,
         -2.14113831e-02],
       [  4.99232860e-02,  -1.62523388e-02,  -7.32985782e-02,
          2.19997394e-02,  -1.34231441e-03,   3.43471114e-02,
          7.50178262e-02,   8.36465142e-02,  -1.02395117e-01,
          6.81645372e-03,   2.25814232e-02,  -2.98723823e-02,
          6.97463005e-03,  -1.43263142e-02,  -4.95436047e-02,
         -1.91782366e-02,  -7.00681703e-03,   2.42352122e-02,
         -3.22688301e-02,  -1.11136244e-02,  -1.27096062e-01,
          6.33627496e-02,   2.76817600e-02,  -3.61017647e-02,
          1.22801989e-01],
       [ -2.56890711e-02,   2.53387116e-02,   2.31675979e-02,
         -2.22522802e-02,  -3.62315514e-02,  -1.28616630e-02,
         -7.53490277e-03,   7.02027247e-03,  -1.32404117e-02,
          5.49951633e-03,   3.14406261e-02,   1.36537394e-02,
          2.05522868e-02,   2.25222045e-02,  -1.11421178e-02,
         -2.70939841e-02,  -3.17452071e-03,   1.78407215e-02,
          3.24474513e-02,  -2.39993644e-02,  -8.47607826e-03,
         -1.02963988e-02,  -1.79988486e-02,   4.66954414e-02,
         -1.25814367e-02],
       [ -3.43961897e-03,   2.26318078e-03,   1.02487284e-02,
         -1.02145826e-02,   5.87847190e-03,   5.70571755e-02,
         -3.91712861e-03,  -4.77007659e-02,   1.37460067e-02,
         -7.58240245e-03,  -3.13508487e-02,   1.27718948e-04,
         -5.09617083e-02,   2.03578401e-02,  -1.27871619e-02,
         -1.35822686e-02,  -4.73748136e-02,   5.65410636e-03,
          4.00697433e-02,  -3.71312119e-03,  -4.33954136e-02,
          3.55766849e-02,  -1.74273181e-02,  -8.46212051e-02,
          8.26224676e-02],
       [ -6.65999285e-02,  -7.30144343e-03,   7.74882379e-02,
          2.29872253e-02,  -3.73615779e-02,  -2.18321479e-02,
          1.35283127e-02,   4.73943271e-02,  -8.26645494e-02,
         -1.79600358e-02,  -5.87628837e-03,   1.25837571e-02,
          7.27299941e-03,  -5.33693910e-02,  -1.73901490e-02,
          4.99263378e-02,   2.46315984e-02,  -2.22475278e-02,
         -2.83323583e-03,   1.90947650e-02,   5.03474748e-03,
         -1.65841311e-02,   1.97700002e-02,   4.64104543e-02,
         -4.16014115e-02],
       [  8.49303941e-02,  -1.01189020e-01,  -5.60573701e-02,
         -2.64127499e-02,   4.34349978e-02,  -4.45438458e-02,
          8.07615529e-02,   1.29095856e-01,  -8.46209433e-03,
          2.00983049e-03,   1.04096743e-01,  -9.83256079e-02,
          2.53765743e-01,   1.68795401e-03,   3.57569318e-02,
         -2.19098536e-02,   8.39465011e-02,   7.63126860e-02,
         -1.03872555e-01,  -2.10485774e-02,   7.45078276e-02,
         -5.85659724e-02,   5.47248022e-02,   1.40828960e-01,
         -7.20989652e-02],
       [ -3.20651128e-02,  -2.14573813e-02,   1.26517706e-02,
          6.55003673e-03,   2.67876689e-03,  -3.51273552e-03,
         -4.17695438e-02,  -2.07130113e-02,   6.58465450e-02,
          9.61381662e-03,  -9.11397390e-04,   2.81248124e-02,
          2.59284916e-02,   2.04940489e-02,   1.70714604e-02,
         -6.77069123e-03,  -2.65279886e-03,  -9.38327888e-03,
         -4.48857594e-03,   9.67504451e-03,   7.06201590e-02,
         -3.19926992e-02,  -2.47490610e-02,   6.90126773e-03,
         -4.84952915e-02],
       [ -2.65529276e-02,   3.09846259e-02,   2.03585939e-02,
          4.25145867e-03,  -1.08680659e-02,   3.35431490e-02,
         -2.54790418e-02,  -5.54401810e-02,   7.40425688e-03,
         -3.29147927e-03,  -4.21790352e-02,   2.93724075e-02,
         -9.37825621e-02,   6.72428705e-03,  -1.52049213e-02,
          1.71275731e-03,  -4.18579955e-02,  -2.07539789e-02,
          4.52076798e-02,   4.95976095e-03,  -3.76299459e-02,
          3.00991307e-02,  -2.25097860e-02,  -7.20477975e-02,
          5.08384413e-02],
       [ -1.13952682e-01,  -5.61113255e-02,   1.63756002e-01,
          1.81884272e-02,  -5.04288990e-02,   4.51049295e-02,
          5.73643496e-02,   6.61858713e-02,  -1.56311502e-01,
         -5.30472926e-02,  -2.84439964e-02,  -1.58410438e-02,
          2.76698176e-02,  -7.51734258e-02,  -4.71383755e-02,
          7.20857529e-02,  -2.57436740e-03,  -3.50821247e-03,
          2.67673460e-02,   2.48873602e-02,  -4.14960818e-02,
          8.06686689e-03,   3.28535857e-02,  -3.38200349e-03,
          4.02599387e-02],
       [ -1.72183672e-02,  -1.83883464e-02,   4.71870235e-02,
         -1.87382527e-02,   2.53214830e-02,  -3.82957667e-02,
         -4.87973709e-02,  -5.08839800e-02,   9.98229310e-02,
         -8.04038060e-03,  -8.31077327e-03,  -4.14474100e-04,
          4.63626119e-02,   5.46324920e-03,   5.96183485e-02,
          2.31145996e-02,   2.79073460e-02,  -1.13942178e-02,
         -6.56067231e-03,   1.45255616e-02,   1.41240194e-01,
         -7.00633047e-02,  -6.30585850e-03,   5.02332931e-02,
         -1.28662642e-01],
       [  1.65778228e-02,   3.66343655e-03,   6.84557704e-03,
         -1.48014491e-02,   9.90661064e-03,   1.81937035e-02,
          1.37439146e-02,  -1.79056954e-02,  -6.21221799e-03,
         -1.11403913e-02,  -1.17433599e-02,  -2.10587943e-02,
         -1.54547249e-02,  -2.45205178e-04,   7.37588914e-04,
          1.89771946e-03,  -1.05388457e-02,   9.11721457e-03,
          1.53898619e-02,  -4.76297386e-03,  -2.24505555e-02,
          1.52204707e-02,   6.74331932e-03,  -2.58377025e-02,
          3.23735595e-02],
       [  4.87343553e-02,  -1.38268325e-02,  -7.29004691e-02,
          1.22404543e-02,  -1.38828818e-02,   2.82554498e-02,
          8.32121348e-02,   1.02177176e-01,  -1.16414765e-01,
          9.83275510e-03,   4.51848987e-02,  -3.32821821e-02,
          3.43939116e-02,  -5.63288187e-03,  -5.55180139e-02,
         -3.38051684e-02,  -2.91639767e-03,   3.91533333e-02,
         -2.81974363e-02,  -2.37428071e-02,  -1.35028697e-01,
          5.95651509e-02,   2.59565496e-02,  -8.77673748e-03,
          1.21553530e-01]]), 'nit': 1000.0}

In [4]:
cmi=np.min([P_t,P_h])
cma=np.max([P_t,P_h])

plt.figure()
plt.imshow(P_h,interpolation='none')
plt.clim(cmi,cma)
plt.colorbar()

plt.figure()
plt.imshow(P_t,interpolation='none')
plt.clim(cmi,cma)
plt.colorbar()

plt.figure()
plt.imshow(P_t-P_h,interpolation='none')
plt.clim(cmi,cma)
plt.colorbar()

plt.show()