Matlab : besoin de l'avis d'utilisateur de "profiler" .
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Matlab : besoin de l'avis d'utilisateur de "profiler" .



  1. #1
    invite6f730007

    Matlab : besoin de l'avis d'utilisateur de "profiler" .


    ------

    Bonjour,

    j'essaye d'optimiser un code tout simple (je construit une "pseudomatrice" d'adjacence) à appliquer à des matrices de très grande taille.

    Mon problème est le suivant :

    pour une tâche parfaitement identique (copier le nombre -1 dans une colonne), Matlab triple quasiment le temps d'opération en moins de 10 lignes de code...

    Que se passe-t-il ?
    Comment corriger ce désagrément?

    Merci d'avance
    Bonne soirée

    -----

  2. #2
    doul11

    Re : Matlab : besoin de l'avis d'utilisateur de "profiler" .

    Bonsoir,

    Citation Envoyé par FinchMulateur Voir le message
    Comment corriger ce désagrément?
    Faire un code en C/C++
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  3. #3
    invite6f730007

    Re : Matlab : besoin de l'avis d'utilisateur de "profiler" .

    Je n'ai jamais eu le bonheur de programmer en C et je débute sur Matlab .


    Toutefois, s'il était possible d'incorporer un programme en C dans matlab (j'en ai besoin pour tracer différents graphiques...), une bonne âme pourrait-elle me programmer ces quelques lignes ... (pas très long, plutôt simple, mais c'est ce qui pompe le plus de temps d'après profiler)

    A est la matrice carrée que je construis.
    M, N, T0 et T1 sont des matrices et vecteurs créés par Matlab auparavant (je suppose qu'il "suffit" de les enregistrer sous matlab et de les incorporer au programme C).

    for k=1:length(M),
    k0=M(k);
    k2=T0(T1(k0,1)+1,T1(k0,2));
    if k2>0,
    A(k0,k2)=-1;
    A(k2,k0)=-1;
    A(k0,k0)=A(k0,k0)+1;
    A(k2,k2)=A(k2,k2)+1;
    end;
    end

    for k=1:length(N),
    k0=N(k);
    k1=T0(T1(k0,1),T1(k0,2)+1);
    if k1>0,
    A(k0,k1)=-1;
    A(k1,k0)=-1;
    A(k0,k0)=A(k0,k0)+1;
    A(k1,k1)=A(k1,k1)+1;
    end;
    end

    Merci d'avance

  4. #4
    lou_ibmix_xi

    Re : Matlab : besoin de l'avis d'utilisateur de "profiler" .

    Pour que MATLAB soit rapide, il faut éviter de faire des boucles et préférer des opérations sur les matrices en choisissant correctement le(s) vecteur(s) servant d'incide(s). Par exemple,
    Code:
    for k=1:length(M),
        k0=M(k);
        k2=T0(T1(k0,1)+1,T1(k0,2));
        if k2>0,
            A(k0,k2)=-1;
            A(k2,k0)=-1;
            A(k0,k0)=A(k0,k0)+1;
            A(k2,k2)=A(k2,k2)+1;
        end
    end
    pourrait être remplacé par quelque chose qui ressemble à:
    Code:
    n = find (T0(T1(M, 1) + 1, T1(M, 2)) > 0);
    A(M, T0(n)) = -1;
    A(T0(n), M) = -1;
    A(M, M) = A(M, M) + 1;
    A(T0(n), T0(n)) = A(T0(n), T0(n))  + 1;
    L'idée est là mais je n'ai pas testé.
    Dernière modification par lou_ibmix_xi ; 23/02/2011 à 12h15. Motif: correction find

  5. A voir en vidéo sur Futura

Discussions similaires

  1. "fondamentales", "dures", "molles" ... : comment classer les sciences ?
    Par Arvirik dans le forum Epistémologie et Logique (archives)
    Réponses: 13
    Dernier message: 22/04/2017, 22h41
  2. L'avis des philosophes "historiques" s'ils nous étaient contemporains.
    Par invite0c72cb7e dans le forum [ARCHIVE] Philosophie
    Réponses: 7
    Dernier message: 04/11/2004, 22h24