Bien le bonjour à tous,

Je donne un coup de main à un collègue qui fait du calcul scientifique en Python. En profilant son programme dont l'execution est trèèèès longue, je me suis rendu compte que la majeure partie du temps etait consacré au produit de matrice, et non à l'inversion comme je l'aurait supposé. Pour vérifier ca, j'ai créé 2 petits programmes et le résultat est assez surprenant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 import numpy as np
 for i in range(1,1000):
         a=np.random.rand(300,300)
         b=np.random.rand(300,300)
         np.dot(a,b)
puis

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 import numpy as np
 for i in range(1,1000):
         a=np.random.rand(300,300)
         b=np.random.rand(300,300)
         np.linalg.inv(a)
(notez que la generation de b n'est pas necessaire dans le second programme, mais je le laisse pour ne pas pénaliser le premier).

Resultat sur le premier programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[203] > time python bench1.py
237.46u 0.08s 3:57.58 99.9%
et sur le second :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
[204] > time python bench2.py
63.49u 0.05s 1:03.58 99.9%
Donc le 2e est quasiment 4 fois plus rapide ! Est ce que quelqu'un a une explication à ca ? J'ajoute par ailleurs qu'on travaille sur une grosse becane sur laquelle nous ne sommes pas administrateurs...

merci !