IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Stockage dans une variable temporaire


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Stockage dans une variable temporaire
    Je dois travailler avec un vecteur issu d'un fichier excel et dont la taille est18000 lignes.
    Le problème est que c'est trop lourd et ça fait ramer mon pc et ça prend des heures pour compiler.
    COmment faire pour travailler avec un vecteur plus petits (genre juste 5 lignes) dont les valeurs seraient écrasées au fur et à mesure de la compilation.
    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Commence par nous montrer ton code...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « 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)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    [x]=xlsread('classeur.xls');
    N=size(x,1);
    Xp=zeros(N,1);
     
    for i=1:N;
        X1=x(i,1);
        X2=x(i,2);
        X3=x(i,3);
        X=[X1 X2 X3];
        Xm=median(X);
     
        d1=abs(X1-Xm);
        d2=abs(X2-Xm);
        d3=abs(X3-Xm);
     
        if d1>Thr;
            Xp(k)=(X2+X3)/2;
            k=k+1;
     
        elseif d2>Thr;
            Xp(k)=(X1+X3)/2;
            k=k+1;
     
        elseif d3>Thr;
            Xp(k)=(X1+X2)/2;
            k=k+1;
     
        end
    end

    L'itération avec k me permet de remplir au fur et à mesure le vecteur Xp.
    Ce que j'aimerais c'est ne pas avoir à initialiser Xp avec des zéros (or pour le moment si je ne le fais pas, elle ne se remplit pas à chaque itération !). J'aimerais travailler dans la boucle avec un vecteur temporaire dont les valeurs s'écraseraient au fur et à mesure des itérations, mais pouvoir en même temps remplir le vecteur Xp (de 18000 lignes) pour en obtenir un tracé à la fin...

    Je ne sais pas si c'est bien clair, enfin j'espère que vous m'aiderez...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Dans un premier temps, il faut essayer au maximum de sortir de la boucle les opérations qui peuvent s'effectuer sur la matrice entière :

    Voici une version "simplement" améliorée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    x = xlsread('classeur.xls');
     
    N = size(x,1);
     
    Xp = zeros(N,1);
    k = 1;
     
    Xm = median(x,2);
    d = abs(x-repmat(Xm,1,3));
     
    for i=1:N
     
        if d(i,1)>Thr
            Xp(k) = (x(i,2)+x(i,3))/2;
            k = k+1;
     
        elseif d(i,2)>Thr
            Xp(k) = (x(i,1)+x(i,3))/2;
            k = k+1;
     
        elseif d(i,3)>Thr
            Xp(k) = (x(i,1)+x(i,2))/2;
            k = k+1;
     
        end
    end
    Après pour optimiser encore plus le code, il faudrait déjà savoir si au moins une des trois conditions est toujours vraies à chaque itération ?

    Tu peux attacher ton fichier xls et nous donner la valeur de Thr si tu veux plus d'aide.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « 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)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    On a Thr = 0.2
    Je ne peux pas rattacher le fichier excel parce que ce sont des données confidentielles.

    Par contre j'ai oublié une condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    if d1>Thr;
    Xp(k)=(X2+X3)/2;
    k=k+1;
     
    elseif d2>Thr;
    Xp(k)=(X1+X3)/2;
    k=k+1;
     
    elseif d3>Thr;
    Xp(k)=(X2+X1)/2;
    k=k+1;
     
    else
    Xp(k)=Xm;
    k=k+1;
    L'une des conditions est toujours vérifiée pour chaque ligne !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    En testant le code que vous m'avez donné, je vois que l'opération median ne me donne pas du tout ce que je veux !
    Je cherche la mediane sur chaque ligne. Par exemple:

    x=(12 12.1 12.2; 12.3 12.5 12.1; 12.5 12.1 12.2)

    Xm=median(12 12.1 12.2)
    Xm=median(12.3 12.5 12.1), etc.

    A chaque valeur de Xm, je dois avoir une valeur de Xp correspondant. C'est pour ça que je la place dans la boucle.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Audpidou911 Voir le message
    En testant le code que vous m'avez donné, je vois que l'opération median ne me donne pas du tout ce que je veux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> x = [12 12.1 12.2; 12.3 12.5 12.1; 12.5 12.1 12.2]
     
    x =
     
       12.0000   12.1000   12.2000
       12.3000   12.5000   12.1000
       12.5000   12.1000   12.2000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >> for n = 1:size(x,1), Xm = median(x(n,:)), end
     
    Xm =
     
       12.1000
     
     
    Xm =
     
       12.3000
     
     
    Xm =
     
       12.2000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> Xm = median(x,2)
     
    Xm =
     
       12.1000
       12.3000
       12.2000
    C'est exactement la même chose sauf que Xm est un vecteur dans le second cas.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « 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)

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/10/2011, 18h45
  2. [MySQL] Stockage dans une variable apres la selection
    Par kitcarson23 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 07/12/2010, 11h45
  3. stockage dans une variable
    Par pseudobidon57 dans le forum Linux
    Réponses: 2
    Dernier message: 31/08/2007, 11h56
  4. Réponses: 8
    Dernier message: 01/04/2006, 15h22
  5. Réponses: 13
    Dernier message: 16/01/2006, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo