Mercurial > hg > absrec
view ABSlambda.py @ 16:23e9b536ba71
Renamed test_exact.py and test_approx.py. Fixed in ABSlambda.py multiplication with D. Still not finished with runbatch.py, probably I'll stop it.
author | Nic Cleju <nikcleju@gmail.com> |
---|---|
date | Tue, 03 Apr 2012 10:18:11 +0300 |
parents | a2d881253324 |
children | 7fdf964f4edd |
line wrap: on
line source
# -*- coding: utf-8 -*- """ Created on Fri Mar 09 14:06:13 2012 @author: ncleju """ import numpy import pyCSalgos.BP.l1qc import pyCSalgos.SL0.SL0_approx import pyCSalgos.OMP.omp_QR import pyCSalgos.TST.RecommendedTST def sl0(y,M,Omega,epsilon,lbd,sigma_min, sigma_decrease_factor=0.5, mu_0=2, L=3, A_pinv=None, true_s=None): N,n = Omega.shape D = numpy.linalg.pinv(Omega) U,S,Vt = numpy.linalg.svd(D) aggDupper = numpy.dot(M,D) aggDlower = Vt[-(N-n):,:] aggD = numpy.vstack((aggDupper, lbd * aggDlower)) aggy = numpy.concatenate((y, numpy.zeros(N-n))) return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx(aggD,aggy,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,A_pinv,true_s)) def bp(y,M,Omega,epsilon,lbd, x0, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False): N,n = Omega.shape D = numpy.linalg.pinv(Omega) U,S,Vt = numpy.linalg.svd(D) aggDupper = numpy.dot(M,D) aggDlower = Vt[-(N-n):,:] aggD = numpy.vstack((aggDupper, lbd * aggDlower)) aggy = numpy.concatenate((y, numpy.zeros(N-n))) return numpy.dot(D, pyCSalgos.BP.l1qc.l1qc_logbarrier(x0,aggD,aggD.T,aggy,epsilon, lbtol, mu, cgtol, cgmaxiter, verbose)) def ompeps(y,M,Omega,epsilon,lbd): N,n = Omega.shape D = numpy.linalg.pinv(Omega) U,S,Vt = numpy.linalg.svd(D) aggDupper = numpy.dot(M,D) aggDlower = Vt[-(N-n):,:] aggD = numpy.hstack((aggDupper, lbd * aggDlower)) aggy = numpy.concatenate((y, numpy.zeros(N-n))) opts = dict() opts['stopCrit'] = 'mse' opts['stopTol'] = epsilon**2 / aggy.size return numpy.dot(D, pyCSalgos.OMP.omp_QR.greed_omp_qr(aggy,aggD,aggD.shape[1],opts)[0]) def tst_recom(y,M,Omega,epsilon,lbd, nsweep=300, xinitial=None, ro=None): N,n = Omega.shape D = numpy.linalg.pinv(Omega) U,S,Vt = numpy.linalg.svd(D) aggDupper = numpy.dot(M,D) aggDlower = Vt[-(N-n):,:] aggD = numpy.vstack((aggDupper, lbd * aggDlower)) aggy = numpy.concatenate((y, numpy.zeros(N-n))) tol = epsilon / numpy.linalg.norm(aggy) return numpy.dot(D, pyCSalgos.RecomTST.RecommendedTST.RecommendedTST(aggD, aggy, nsweep, tol, xinitial, ro))