The document contains Python code snippets related to matrix operations, clustering algorithms, and data manipulation. It includes functions for calculating minimum products, distances, and inertia in clustering, as well as methods for initializing clusters and performing k-means clustering. Additionally, it provides SQL queries for data retrieval and analysis from a dataset named 'Fleurs' and 'Seg'.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
16 views3 pages
CNC2024 Corrigé
The document contains Python code snippets related to matrix operations, clustering algorithms, and data manipulation. It includes functions for calculating minimum products, distances, and inertia in clustering, as well as methods for initializing clusters and performing k-means clustering. Additionally, it provides SQL queries for data retrieval and analysis from a dataset named 'Fleurs' and 'Seg'.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3
CNC2024-PSI Q9-
import numpy as np def matC(T) :
import math as m C =[[0]*(len(T) – 1) for i in range(len(T) – 1)] import random as rd for j in range(1, len(C)) : Q1- L = [5, 2, 6, 4, 7, 0, 1] for i in range(len(C) – j) : Q2- L = [C[i][k]+C[k+1][i+j]+T[i]*T[k+1]*T[i+j+1] for def listeCh(n) : k in range(i, i+j)] L=[] C[i][i+j] = min(L) while n != 0 : return C L.append(n%10) Q10- n = n//10 def matP(T, C) : return L P = [[0]*(len(T)– 1) for i in range(len(T) – 1)] Q3- for j in range(1, len(C)) : def prod(L) : for i in range(len(C) – j) : p=1 for k in range(i, i + j) : for x in L : if C[i][k]+C[k+1][i+j]+T[i]*T[k+1]*T[i +j+1]==C[i][i+j]: p *= x P[i][i+j] = k return p return P Q4- C(n) = 2+2n O(n) avec n = len(L) Q11-
Q5- def prod(M, i, j, P) :
def prodCh(n) : if i == j : return prod(listeCh(n)) return M[i]
Q6- elif i == j – 1 :
def decimal(L) : return np.dot(M[i], M[j])
s=0 elif i < j – 1 :
for i in range(len(L)) : return np.dot(prod(M, i, P[i][j], P), prod(M,P[i][j]+1, j, P)) s += L[i]*10**i Q12- return s def prodMat(M) :
Q7- T = [len(M[0])] + [len(x[0]) for x in M]
def minProd(T, i, j) : C = matC(T) if i == j – 1 : P = matP(T, C) return 0 return prod(M, 0, len(M) – 1, P)
R=[minProd(T,i,k)+minProd(T,k,j)+T[i]*T[k]*T[j] for k in Q13-
range(i+1, j)] def convertir(S) : return min(R) L = S.split(';')
Q8- return [float(x) for x in L]
def minPrd(T, i, j, D={}) : Q14- if i == j – 1 : def lireF(chemin) : return 0 f = open(chemin, "r") elif (i, j) in D.keys( ) : L = f.readlines( ) return D[(i, j)] f.close( ) R=[] return [convertir(x) for x in L]
for k in range(i+1, j) : Q15-
a, b = minPrd(T, i, k, D), minPrd(T, k, j, D) def distance(X, Y) :
D[(i, k)], D[(k, j)] = a, b s=0
R.append(a + b + T[i]*T[k]*T[j]) for i in range(len(X)) :
return min(R) s += (X[i] - Y[i])**2
return m.sqrt(s) for v in G.values(): Q16- j = procheC(D[v[0]], C) def initC(D, k) : for i in v : C, i = [], 0 s += distance(D[i], C[j]) while i < k : return s j = rd.randint(0, len(D) – 1) Q23- if D[j] not in C : def linertie(D, n) : C.append(D[j]) L = [] i += 1 for k in range(1, 10) : return C G, C = kMeans(D, k, n) Q17- s = inertie(D, G, C) def procheC(F, C) : L.append((k, s)) k, dmin = 0, distance(F, C[0]) return L for i in range(1, len(C)) : Q24- longS, largS, longP, largP (cluster = 1 ou 2(Fleurs)) d = distance(F, C[i]) Q25- select longS, largS, longP, largP from Fleurs where cluster in if d < dmin : (0, 2) order by longS desc k, dmin = i, d Q26- select avg(longS), max(largS), min(longP), max(cluster)+1 return p from Fleurs Q18- Q27- select cluster, avg(longS), avg(largS), avg(longP), avg(largP) def cluster(D, C) : from Fleurs group by cluster G = {} Q28- select cluster, count(*) as n from Fleurs group by cluster for i in range(len(C)) : having n >= 1000 and n%10 == 0 G[i] = [] ………………………………………………………………….. for i in range(len(D)) : CNC2024-MP p = procheC(D[i], C) import numpy as np G[p].append(i) import random as rd return G import matplotlib.pyplot as pl Q19- Q1- def newC(D, g) : def puiss(x, n) : C = [0]*len(D[0]) p=1 for j in range(len(D[0])) : while n != 0 : L = [D[i][j] for i in g] if n%2 == 1 : C[j] = sum(L)/len(L) p = p*x return C x, n = x*x, n//2 Q20- return p def majC(D, G) : Q2- [10, 0, 7, -3, -2, 0, -1] return [newC(D, v) for v in G.values()] Q3- Q21- def val(x, L) : def kMeans(D, k, n) : s=0 C = initC(D, k) for i in range(len(L)) : for i in range(n) : s += L[i]*puiss(x, i) G = cluster(D, C) return s C = majC(D, G) Q4- return G, C C(n) = n+ log2(i) O(log2(n!)) O(nlog2(n)) avec n = len(L) Q22- Q5- def inertie(D, G, C) : def image(X, L) : s=0 return [val(i, L) for i in X] Q6- def seg(M, C) : def compose(x, L, n) : return [[procheC(M[i][j],C) for j in range(len(M[0]))] for i for i in range(n) : in range(len(M))] x = val(x, L) Q20- return x def newC(M, R, g) : Q7Q11- voir Q7Q12 de l’épreuve CNC2024-PSI s, n = [0]*len(M[0][0]), 0 Q12- 8bits for i in range(len(R)) : Q13- 1000*1800*3/1000=5400ko for j in range(len(R[0])) : Q14- if R[i][j] == g : def histo(M) : n += 1 H = [[0]*256 for i in range(3)] for k in range(len(s)) : for i in range(len(M)) : s[k] += M[i][j][k] for j in range(len(M[0])) : for k in range(len(s)) : for k in range(3) : s[k] = s[k] // n H[k][M[i][j][k]] += 1 return s return H Q21- Q15- def majC(M, R, k) : def rep(H) : return [newC(M, R, i) for i in range(k)] for i in range(len(H)) : Q22- pl.plot(H[i]) def kMeans(M, k, n) : pl.legend(['Rouge', 'Vert', 'Bleu']) C = initC(M,k) pl.show( ) for i in range(n) : Q16- R = seg(M, C) def distance(X, Y) : C = majC(M, R, k) s=0 return R, C for i in range(len(X)) : Q23- s += abs(X[i] - Y[i]) def calInertie(M, R, C) : return s s=0 Q17- for i in range(len(R)) : def initC(M, k) : for j in range(len(R[0])) : assert k < len(M)*len(M[0]) s += distance(M[i][j], C[R[i][j]]) C, n = [], 0 return s while n < k : Q24- i, j = rd.randint(0, len(M) – 1), rd.randint(0, len(M[0])-1) def inerties(M, n) : if M[i][j] not in C : D = {} C.append(M[i][j]) for k in range(1, 10) : n+=1 R, C = kMeans(M, k, n) return C D[k] = calInertie(M, R, C) Q18- return D def procheC(P, C) : Q25- (ligne, colonne) k, dm = 0, distance(P, C[0]) Q26- ligne, colonne, rouge, vert, bleu (cluster = 1 ou 2(Seg)) for i in range(1,len(C)): Q27- select ligne, colonne, rouge, vert, bleu from Seg where cluster d = distance(P, C[i]) in (1, 2) order by ligne, colonne if d < dm : Q28- select cluster, count(*) as n, avg(rouge) as c from Seg group by k, dm = i, d cluster having c<=200 and c>=100 order by n desc return k Q29- select avg(n) from (select count(*) as n from Seg group by Q19- cluster) as T