Mercurial > hg > pycsalgos
diff scripts/ABSapprox.py @ 20:45255b0a6dba
2011 11 08 Worked from school
author | nikcleju |
---|---|
date | Tue, 08 Nov 2011 14:43:29 +0000 |
parents | ef0629f859a3 |
children | 2dd78e37b23a |
line wrap: on
line diff
--- a/scripts/ABSapprox.py Mon Nov 07 22:15:13 2011 +0000 +++ b/scripts/ABSapprox.py Tue Nov 08 14:43:29 2011 +0000 @@ -28,12 +28,21 @@ aggD = np.concatenate((aggDupper, lbd * aggDlower)) aggy = np.concatenate((y, np.zeros(N-n))) - sigmamin = 0.1 - return aggD,aggy,epsilon,sigmamin + sigmamin = 0.01 + sigma_decrease_factor = 0.8 + mu_0 = 2 + L = 10 + return aggD,aggy,epsilon,sigmamin,sigma_decrease_factor,mu_0,L + +def post_multiply_with_D(D,gamma): + return np.dot(D,gamma) +def post_do_nothing(D,gamma): + return gamma # Define tuples (algorithm setup function, algorithm function, name) -gap = (gap_paramsetup, pyCSalgos.GAP.GAP.GAP, 'GAP') -sl0 = (sl0_paramsetup, pyCSalgos.SL0.SL0_approx.SL0_approx, 'SL0_approx') +gap = (gap_paramsetup, pyCSalgos.GAP.GAP.GAP, post_do_nothing, 'GAP') +sl0 = (sl0_paramsetup, pyCSalgos.SL0.SL0_approx.SL0_approx, post_multiply_with_D, 'SL0_approx') +#sl0 = (sl0_paramsetup, lambda x: np.dot(x[0],x[1]()), 'SL0_approx') # Main function def mainrun(): @@ -46,11 +55,11 @@ sigma = 2.0; delta = 0.8; rho = 0.15; - numvects = 2; # Number of vectors to generate - SNRdb = 20; # This is norm(signal)/norm(noise), so power, not energy + numvects = 10; # Number of vectors to generate + SNRdb = 20.; # This is norm(signal)/norm(noise), so power, not energy # Process parameters - noiselevel = 1 / (10^(SNRdb/10)); + noiselevel = 1.0 / (10.0**(SNRdb/10.0)); d = 50; p = round(sigma*d); m = round(delta*d); @@ -75,17 +84,17 @@ err = dict() relerr = dict() for i,algo in zip(np.arange(numalgos),algos): - xrec[algo[2]] = np.zeros((lambdas.size, d, y.shape[1])) - err[algo[2]] = np.zeros((lambdas.size, y.shape[1])) - relerr[algo[2]] = np.zeros((lambdas.size, y.shape[1])) + xrec[algo[3]] = np.zeros((lambdas.size, d, y.shape[1])) + err[algo[3]] = np.zeros((lambdas.size, y.shape[1])) + relerr[algo[3]] = np.zeros((lambdas.size, y.shape[1])) for ilbd,lbd in zip(np.arange(lambdas.size),lambdas): for iy in np.arange(y.shape[1]): - for algosetupfunc,algofunc,strname in algos: + for algosetupfunc,algofunc,algopostfunc,strname in algos: epsilon = 1.1 * np.linalg.norm(realnoise[:,iy]) inparams = algosetupfunc(y[:,iy],M,Omega,epsilon,lbd) - xrec[strname][ilbd,:,iy] = algofunc(*inparams)[0] + xrec[strname][ilbd,:,iy] = algopostfunc(algofunc(*inparams)[0]) err[strname][ilbd,iy] = np.linalg.norm(x0[:,iy] - xrec[strname][ilbd,:,iy]) relerr[strname][ilbd,iy] = err[strname][ilbd,iy] / np.linalg.norm(x0[:,iy])