J'ai travaillé sur un projet et je voudrais savoir si mes réponses sont justes. Est-ce que je peux poster mon sujet et mon code ? Ce n'est pas un quelque chose d'énorme, juste 2 questions
Il fallait construire des matrices et effectuer des opérations matricielles dessus pour pouvoir calculer une somme et trouver le rang d'une matrice.
Merci !
A ++
Bonjour,
Donc, la première question, j'ai effectué la somme basique et non celle demandée car je galère à la faire.
Première question : Somme de i=1 à 8 de Beta ( Cf la formule qui est dans mon code source)
J'ai essayé ceci mais, cela me semble bizarre. Puis, j'ai raccordé ça à ma sortie ( cf. code final).
def sigma(i,n):
x = np.arange(i,n)
return np.sum([x+1])
Est-ce que mon "bricolage" vous semble correct ? Avec ma première tentative de somme, je trouvai 8 et maintenant avec mon bricolage je trouve 44.
Deuxième question : Donner le rang de la matrice après transformation ( cf. mon code pour la transformation de la matrice).
A cette question, je trouve rang = 2
Pourriez vous me dire si c'est correct comme réponse ?
Merci beaucoup
A ++ Scrat
Mon code complet :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
from numpy.linalg import matrix_rank
print ("Projet 1: calculs matriciels avec la librairie Numpy \n")
#vecteur y
def vecteur_y ():
y = np.array([[1],[1],[1],[1],[1],[1],[1],[1]])
return y
#=debug
#print ("Le vecteur y : \n\n",vecteur_y())
#matrice identitée dans R⁸
def I_8 ():
i = np.identity(8,dtype=int)
return i
#==debug
#print ("La matrice identitée dans R⁸: \n\n",I_8())
#matrice E à construire
def matrice_E ():
e = np.zeros((8,8),dtype=int)
e[0,-1] = 1
return e
#===debug
#print ("La matrice E : \n\n\n",matrice_E())
#matrice X : matrice d'observation
I_8 = np.identity(8,dtype=int)
matrice_E = np.zeros((8,8),dtype=int)
matrice_E[0,-1] = 1
matrix_x = np.add(I_8, matrice_E)
#====debug
#print ("La matrice X : \n\n\n", matrix_x)
print ("- Calcul de beta avec la formule du sujet")
#============utilisation des fonctions de la librairie numpy pour construire le beta
Transpose = matrix_x.transpose()
Produit1 = Transpose @ matrix_x
Inverse = np.linalg.inv(Produit1)
Produit2 = Inverse @ Transpose
vecteur_y = vecteur_y()
#beta devient donc:
beta = np.dot(Produit2,vecteur_y)
print ("β = \n\n\n",beta)
#=====debug
#print ("Transpose : \n\n\n",Transpose)
#print ( "Produit 1 : \n\n\n",Produit1)
#print ("Produit 2 : \n\n\n",Produit2)
#print ("Vecteur y : \n\n\n",vecteur_y())
###programme principal
def sigma(i,n):
x = np.arange(i,n)
return np.sum([x+1])
print (" 8 \n")
print ("* Question 1: ∑βi \n")
print (" i=1 \n")
#calcul de sigma de 1 à 8 de beta i
print ("\n\n")
#print ("La somme est de :",np.sum(vecteur_y))
print ("La somme est de : \n",sigma(1,9) * vecteur_y)
#donner le rang de la matrice X^T X - I8
#calcul de la nouvelle matrice
#n = nouvelle matrice
n = np.subtract(Transpose @ matrix_x,I_8)
print ("X^T X - I8 = matrice n : \n\n",n)
print ("\n\n")
#calcul du rang de la matrice n
print ("** Question 2: \n")
n = matrix_rank(n)
print ("Le rang de la matrice n: \n",n)
/ironie bien sûr que non, sur un forum de programmation, on ne donne pas d'aide surtout si on la demande; tu l'as remarqué les autres ne demandent pas la permission et on les aide /ironie
Tu aurais mettre tes questions à la suite du fil, plutôt que d'éditer ton 1er message, sinon on voit pas que le post à eu une mise à jour.
ligne 15 tu définis une fonction I_8; en ligne 29, I_8 devient une variable égale à la matrice identité (même remarque pour matrice_E entre ligne 22 et 30/31)
et également ligne 41 on tu affectes à vecteur_y le résultat de la fonction vecteur_y() (au final, ça ne change pas grand chose ici)
Pour beta, on n'a pas la formule du sujet
dans la suite (à partir de la ligne 58) à quel moment tu fait intervenir beta ?
Oui, tu as raison, j'ai cafouillé ! J'avais essayé de répondre à mon propre post, mais j'avais un message pour me dire " tintin" , il faut attendre 24h. Donc j'ai ré-édité mon message
Oui, c'est le bazar, je l'admets. Je voulais faire des fonctions pour rendre le code plus "joli" ;)
Pour beta : - Tu pourras deviner avec le code la formule du sujet.
J'ai trouvé un truc qui fait la somme en même temps que la transformation du sujet. Je te passe ça :
j'aime pas deviner, je peux mal deviner, il y a beaucoup d'intermédiaires,
si je prends ton code beta=(matrice inverse de (transposé(X) * X) * transposé(X) * vecteur_y, ce qui ne correspond pas à ta ligne dans le dernier poste (il manque un transpose d'un côté ou il est en trop de l'autre)
pour sigma, tu n'as pas répondu : où tu utilises beta pour son calcul ?
pour la question 2, si n=X^T X - I8 veut dire (Transposé de X) * (X) - I_8, alors l'opération semble OK
Je t'ai communiqué le sujet. Excuse moi pour les " devinettes".
Pour la question 2, oui c'est bien cela.
Concernant le code, oui, j'ai fait des modifs en cours de route, excuse moi, j'ai oublié de te l'indiquer.
Je te passe le nouveau code, cela sera plus compréhensible pour toi.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
from numpy.linalg import matrix_rank
print ("Projet 1: calculs matriciels avec la librairie Numpy \n")
#vecteur y
def vecteur_y ():
y = np.array([[1],[1],[1],[1],[1],[1],[1],[1]])
return y
#=debug
#print ("Le vecteur y : \n\n",vecteur_y())
#matrice identitée dans R⁸
def I_8 ():
i = np.identity(8,dtype=int)
return i
#==debug
#print ("La matrice identitée dans R⁸: \n\n",I_8())
#matrice E à construire
def matrice_E ():
e = np.zeros((8,8),dtype=int)
e[0,-1] = 1
return e
#===debug
#print ("La matrice E : \n\n\n",matrice_E())
#matrice X : matrice d'observation
I_8 = np.identity(8,dtype=int)
matrice_E = np.zeros((8,8),dtype=int)
matrice_E[0,-1] = 1
matrix_x = np.add(I_8, matrice_E)
#====debug
#print ("La matrice X : \n\n\n", matrix_x)
print ("- Calcul de beta en cours....avec la formule du sujet \n")
#============utilisation des fonctions de la librairie numpy pour construire le beta
Transpose = matrix_x.transpose()
Produit1 = Transpose @ matrix_x
Inverse = np.linalg.inv(Produit1)
Produit2 = Inverse @ Transpose
vecteur_y = vecteur_y()
#calcul de beta devient donc:
beta = np.sum((np.linalg.inv(np.transpose(matrix_x) @ matrix_x)) @ vecteur_y)
#=====debug
#print ("Transpose : \n\n\n",Transpose)
#print ( "Produit 1 : \n\n\n",Produit1)
#print ("Produit 2 : \n\n\n",Produit2)
#print ("Vecteur y : \n\n\n",vecteur_y())
###programme principal
print (" 8 \n")
print ("* Question 1: ∑βi \n")
print (" i=1 \n")
#calcul de sigma de 1 à 8 de beta i
print ("\n\n")
print(f"La somme de beta i={beta} \n")
#donner le rang de la matrice X^T X - I8
#calcul de la nouvelle matrice
#n = nouvelle matrice
n = np.subtract(Transpose @ matrix_x,I_8)
print ("X^T X - I8 = matrice n : \n\n",n)
print ("\n\n")
#calcul du rang de la matrice n
print ("** Question 2: \n")
n = matrix_rank(n)
print ("Le rang de la matrice n: \n",n)
ta ligne 44 n'est pas bonne, comme je l'ai dit précédemment, il te manque la transposition de X dans la multiplication de (XT*X)-1 tu multiplies ce terme simplement par X et pas XT.
on ne voit que 4/5 (je dirais) de l'énoncé ..... donc on ne voit pas la définition complète de I8 et de E
Projet numpy : Avis
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Linux , le marché en zone libre
Linux , le marché en zone libre
Linux , le marché en zone libre
Linux , le marché en zone libre