|
Publicité | |||||||||||||||||||||||
|
|
#1 | ||||||||||||||||||||||||||
![]() ![]() Inscription : novembre 2006 Messages : 12 334 ![]() |
C'est bien dommage
![]() Prenons le cas d'une matrice A et d'un vecteur B : Code :
Code :
Par exemple, une simple soustraction, A - B qui renverrait : Malheureusement si l'on fait directement la soustraction entre la matrice et le vecteur, MATLAB ne veut rien savoir : Code :
------------------------------------------------------ Défi : Trouver la méthode la plus rapide pour effectuer une soustraction entre les colonnes d'une matrice et un vecteur Contrainte : le code devra être contenu dans un fichier m fonction dont le nom sera votre pseudo (si votre pseudo n'est pas accepté comme nom de fonction, prenez un nom similaire ). Cette fonction prendra en argument d'entrée une matrice A et un vecteur B et retournera en argument de sortie une matrice C résultat. Par exemple, si je (Dut) propose une solution, la première ligne du fichier sera : Notes :
Alors, quelle serait la méthode la plus rapide sous MATLAB selon vous ? A vous de jouer... donnez vos solutions à la suite de ce message ![]() ------------------------------------------------------ Les solutions proposées : mr_samurai : Code :
Code :
Code :
Code :
Code :
Code utilisé pour la comparaison : Code :
Temps d'exécution : MATLAB R2008a - Windows XP - 2GHz - 2Go Ram Code :
Code :
Code :
Code :
Dernière modification par Dut ; 30/10/2008 à 23h28. |
||||||||||||||||||||||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : décembre 2007 Messages : 952 ![]() |
Salut,
J'ouvre le bal Code :
++
__________________
Matlab 2008b / Vista Dernière modification par mr_samurai ; 05/11/2009 à 15h17. |
||
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() ![]() Inscription : novembre 2007 Messages : 547 ![]() |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : décembre 2007 Messages : 952 ![]() |
__________________
Matlab 2008b / Vista |
|
|
00
|
|
|
#5 | |||
![]() ![]() ![]() Inscription : mars 2007 Messages : 9 349 ![]() |
Faut pas baisser les bras
![]() En plus la rapidité d'exécution dépendra aussi de la taille des matrices sur lesquelles on travaille : une méthode pourra être bien pour des matrices de grande taille alors qu'une autre sera plus efficace sur des matrices de petite taille. L'énoncé ne donnant pas la taille des matrices.... ![]() Donc moi je me lance (en piquant le début du samurai) : Code :
Citation:
![]() Mais je ne suis pas sure que ce soit toujours vrai suivant les entrées qu'on prendra.
__________________
Adepte de la maïeutique |
|||
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Inscription : décembre 2007 Messages : 952 ![]() |
Voici mon script de test :
Code :
Code :
.++
__________________
Matlab 2008b / Vista |
||||
|
|
00
|
|
|
#7 | ||||
![]() ![]() ![]() Inscription : mars 2007 Messages : 9 349 ![]() |
Ben tu dois avoir une bête de course, avec le même code j'obtiens :
Code :
Code :
Pfff...Pô juste.
__________________
Adepte de la maïeutique |
||||
|
00
|
|
|
#8 | ||||
|
Membre émérite
![]() ![]() Inscription : novembre 2007 Messages : 547 ![]() |
Voici les temps que j'obtiens
Code 1er essai :
Code 2èmeessai :
ones semble être la méthode la plus rapide pour l'instant. La boucle for est vraiment lente chez moi! |
||||
|
00
|
|
|
#9 | |
![]() ![]() ![]() Inscription : mars 2007 Messages : 9 349 ![]() |
Citation:
Non par contre il serait intéressant que tu nous donnes : - ta version de MATLAB (Samurai et moi n'avons déjà pas la même) - ton OS (là on a le même) Et puis bon pour le faire proprement il faudrait tout fermer à côté mais personnellement j'ai la flemme donc on va laisser le Responsable juger
__________________
Adepte de la maïeutique |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() ![]() Inscription : novembre 2007 Messages : 547 ![]() |
Oups, j'ai oublié de préciser ma version:
R2008.a sous linux (2.6.24). |
|
00
|
|
|
#11 | ||
|
Expert Confirmé
![]() ![]() Aurélien QueffurustMATLAB Geek ! Inscription : juin 2006 Messages : 1 751 ![]() |
Allez moi aussi je me lance , je vais utiliser bsxfun (une feature dispo depuis la R2007a):
Code :
Dernière modification par Dut ; 07/10/2008 à 14h24. |
||
|
00
|
|
|
#12 | ||
|
Membre confirmé
![]() Inscription : août 2007 Messages : 300 ![]() |
Code :
Dernière modification par Dut ; 13/10/2008 à 00h05. |
||
|
|
00
|
|
|
#13 | ||
|
Membre confirmé
![]() Inscription : août 2007 Messages : 300 ![]() |
solution utilisant les coordinees homogenes... lente, juste postee a titre informatif
Juste un commentaire en ce qui concerne la solution avec repmat, il existe des version mex plus rapides en general que celle de matlab, voir par exemple http://research.microsoft.com/~minka...re/lightspeed/ Code :
|
||
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : novembre 2006 Messages : 12 334 ![]() |
Le premier message a été mis à jour avec les temps d'exécution pour des matrices de différentes tailles.
Si certains pouvaient faire tourner la fonction microDefi2.m et me retourner la variable T dans un fichier mat avec la configuration de l'ordinateur (OS, processeur), on pourrait faire un semblant de comparatif par machine A utiliser comme ceci : Si une erreur mémoire survient, essayez comme ceci : En faisant décroitre num (entier) jusqu'à ce que ça marche. Pensez à nettoyer MATLAB avant d'exécuter le code : Pour ceux qui utilisent une version récente, pensez à mentionner si vous utilisez le multithreading
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille Dernière modification par Dut ; 22/10/2008 à 22h40. |
|
|
00
|
|
|
#15 |
![]() ![]() Inscription : novembre 2006 Messages : 12 334 ![]() |
Voila une idée que personne ne semble avoir creusé... sans parler d'utiliser un MEX de repmat, je rappelle que les structures itératives peuvent aussi être intégrées dans un fichier MEX...
Quelqu'un veut essayer ?
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
|
|
#16 |
![]() ![]() ![]() Inscription : mars 2007 Messages : 9 349 ![]() |
Voilà.
MATLAB R2007a - Windows Vista SP1 - 2GHz - 2Go Ram [Edit=Dut]
__________________
Adepte de la maïeutique |
|
00
|
|
|
#17 | |||
|
Membre confirmé
![]() Inscription : août 2007 Messages : 300 ![]() |
Citation:
je pense que ma version devrait etre plus rapide (dans le cas ou le nombre de lignes est plus grand que le nombre de colonnes), de plus elle est plus efficace au niveau du cache CPU.. Salutations, Greg |
|||
|
|
00
|
|
|
#18 |
|
Membre confirmé
![]() Inscription : août 2007 Messages : 300 ![]() |
|
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() ![]() Aurélien QueffurustMATLAB Geek ! Inscription : juin 2006 Messages : 1 751 ![]() |
Sous Linux 64-bit , 8 cores , sous R2008b
J'ai zippé le MAT-file |
|
00
|
|
|
#20 |
![]() ![]() Inscription : novembre 2006 Messages : 12 334 ![]() |
C'est vrai que pour les processeurs multicoeurs, il peut être intéressant de faire l'essai avec le multithread aussi...
__________________
• Mes contributions MATLAB (R2009a - Windows & Linux) • J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) • Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel) • Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com