From a8c8245d15b1f1d3488c719e8bc942c29354b695 Mon Sep 17 00:00:00 2001 From: Pierre-antoine Comby Date: Fri, 1 Mar 2019 09:53:32 +0100 Subject: [PATCH] correction du code --- .../algo_code/code_arithmetique.py | 66 ++++++++++++++++--- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/455-Codage_Sources/algo_code/code_arithmetique.py b/455-Codage_Sources/algo_code/code_arithmetique.py index 6421cd7..f05f0f8 100755 --- a/455-Codage_Sources/algo_code/code_arithmetique.py +++ b/455-Codage_Sources/algo_code/code_arithmetique.py @@ -2,28 +2,78 @@ import numpy as np - -p_s = [0.1,0.9] +N=10 +p = 0.2 P = np.random.rand(N) -X = [0 for p in P if p > p_s[0] else 1] +X = np.zeros(N,dtype='int') +for i in range(N): + if P[i] > p: + X[i] = 1 +X=[0,1,0,0,1,0,0,0,0,0] +print(X) -def binary(n,b=2,m): +def binary(n,m,b=2): """ Convertie un nombre décimal en sa version binaire tronqué à m bits. """ - return np.ceil(n*b**m) + binaire= np.floor(n*b**m) # on se décale dans les entiers et on floor -def arithm(X): + return binaire,np.binary_repr(int(binaire)) + +def arithm(X,p): l=[0] h= [1] for x in X: if x == 0: - h.append(l[-1]+p_s[0]*(h[-1]-l[-1])) + h.append(l[-1]+p*(h[-1]-l[-1])) l.append(l[-1]) else: - l.append(l[-1]+p_s[0]*(h[-1]-l[-1])) + l.append(l[-1]+p*(h[-1]-l[-1])) h.append(h[-1]) lmb = (l[-1]+h[-1])/2 + mu = int(-np.log2(h[-1]-l[-1]))+1 + code = binary(lmb,mu) + return code,lmb,mu + +def arithm_pratique(X,p): + l = [0] # borne inférieur + h =[1] # borne supérieur + f = 0 # follow + c =[] # code + for k in range(len(X)): + print("for loop") + if X[k] == 0: + l.append(l[-1]) + h.append(l[-1]+p*(h[-1]-l[-1])) + else: + l.append(l[-1]+p*(h[-1]-l[-1])) + h.append(h[-1]) + print(X[k]) + print(l[-3:]) + print(h[-3:]) + while ((l[-1]>=0 and h[-1]<0.5) + or (l[-1]>=0.5 and h[-1]<1) + or (l[-1]>= 0.25 and h[-1]<0.75)): + print(" loop") + if (l[-1]>=0 and h[-1]<0.5): + print(" case 1") + c += [0]+[1]*f + l[-1] *=2 + h[-1] *=2 + elif (l[-1]>=0.5 and h[-1]<1): + print(" case 2") + c += [1]+[0]*f + l[-1] = 2*l[-1]-1 + h[-1] = 2*h[-1]-1 + elif (l[-1]>= 0.25 and h[-1]<0.75): + print(" case 3") + f +=1 + l[-1] = 2*l[-1]-0.5 + h[-1] = 2*h[-1]-0.5 + return c + +#print(arithm(X,p)) +print(arithm_pratique(X,p))