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 :

Boucle incrémentation lignes


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut Boucle incrémentation lignes
    Bonjour,

    Me voici à nouveau bloqué avec mon code

    Donc j'ai une colonne d'une centaine de lignes et j'aimerais faire une boucle de façon à calculer la moyenne des lignes 1 - 9 - 17 - 25 .... jusqu'à la fin de ma colonne, puis la moyenne des lignes 2 - 10 - 18 - 26 .... jusqu'à 8 - 16 - 24 - 32...

    Mon fichier est comme ça;

    sujet 1 Temps 1.
    sujet 1 Temps 2.
    ...
    sujet 1 Temps 8
    sujet 2 temps 1
    ....
    sujet 2 temps 8
    sujet 3 temps 1
    ....

    Mais je sais pas combien je vais avoir de sujets. Donc je voudrais une boucle qui une fois qu'elle a fait le calcul pour mon Temps 1 (pour tous mes sujets), passe au Temps 2 ... jusqu'au Temps 8

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Chaque sujet contient-il exactement 8 temps ? Ou est-ce un nombre, fixe pour chaque sujet, que tu peux obtenir ?
    Si tel est le cas, tu peux appliquer la fonction reshape pour avoir un sujet sur chaque colonne, et ainsi pouvoir moyenner sur chaque ligne.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Merci pour ta réponse.

    Chaque sujet contient exactement 8 temps...

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 115
    Par défaut
    Bonjour,

    Je suis dans le même cas que Winjerome je n´ai pas tout à fais compris ce que tu cherchais réellement a faire.
    Néanmoins voici un petit bout de code dis moi si c´est à peu prés ce que tu voudrais faire :

    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
    function [] = Untitled(varargin)
    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here
     
    M = [1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54;1 3;34 54];
     
    for i=1:8:length(M)
        valeur=M(i,2);
        if i == 1
            valeurstocke=valeur;
            continue;
        end
        valeurstocke=[valeurstocke;valeur];
    end
     
    [ligne,colone] = size(valeurstocke);
    valeurstocke = reshape(valeurstocke,colone,ligne);
    valeurmoyenne = mean(valeurstocke);
     
    end
    Je ne m´intéresse ici que à la 2eme colonne dont je ne récupère qu´une valeur sur 8.
    Évidement dans ton cas je te conseille l´utilisation de la fonction load pour lire le contenu de ton fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = load(chemin complet de ton fichier)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas tout à fait ce que j'avais en tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    M = [1 1 ; 1 2 ; 1 2 ; 1 3 ; 1 4 ; 1 5 ; 1 6 ; 1 7 ; 1 8 ;
         2 1 ; 2 2 ; 2 2 ; 2 3 ; 2 4 ; 2 5 ; 2 6 ; 2 7 ; 2 8 ;
         3 1 ; 3 2 ; 3 2 ; 3 3 ; 3 4 ; 3 5 ; 3 6 ; 3 7 ; 3 8];
     
    Temps = reshape(M(:,2),9,[]);
    mean(Temps,2)

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Merci pour vos réponses!

    J'ai utilisé le code de Junkie et il me trouve bien les valeurs de la 1ere ligne jusqu'à la fin toutes les 9 lignes mais ensuite il passe pas à la seconde ligne ...

    Aussi, j'aimerai comprendre le code et pas le recopier bêtement sans savoir ce que je fais. Donc pouvez vous s'il vous plait, me dire si j'ai compris?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for t=1:9:length(TW_max_torque_EACH_subjects); %cherche toutes les valeurs de la première ligne jusqu'à la fin de ma colonne toutes les 9 lignes
        valeur=TW_max_torque_EACH_subjects(t,:) % affiche les valeurs
        if t== 1 
            TW_torque=valeur;
            continue;
        end
        TW_torque = [TW_torque;valeur]; %affiche toutes les valeurs à la suite dans une colonne 
    end
     
    PAP_TW_torque_ALL_subjects_PRE = mean(TW_torque) % fait la moyenne de toutes les valeurs se trouvant dans la colonne
    Pouvez vous aussi m'expliquer ce que fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if t== 1 
            TW_torque=valeur;
            continue;
        end
    Encore merci pour votre patience

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Alors j'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for x=1:8
    t=x:9:length(TW_max_torque_EACH_subjects); %cherche toutes les valeurs de la première ligne jusqu'à la fin de ma colonne toutes les 9 lignes
        valeur=TW_max_torque_EACH_subjects(t,:) % affiche les valeurs
        if t== 1 
            TW_torque=valeur;
            continue;
        end
        TW_torque = [TW_torque;valeur]; %affiche toutes les valeurs à la suite dans une colonne 
    end
     
    PAP_TW_torque_ALL_subjects_PRE = mean(TW_torque) % fait la moyenne de toutes les valeurs se trouvant dans la colonne
    Sans succès :dry:

  8. #8
    Invité
    Invité(e)
    Par défaut
    Comme déjà dit, ce code :
    Citation Envoyé par Winjerome Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Temps = reshape(M(:,2),9,[]);
    mean(Temps,2)
    suffit à lui seul. Pas besoin de rajouter de boucle ou autre.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Celui là je le comprend pas même avec doc reshape...Si quelqu'un peux m'expliquer

  10. #10
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Laurent3131 Voir le message
    Bonjour,

    Me voici à nouveau bloqué avec mon code

    Donc j'ai une colonne d'une centaine de lignes et j'aimerais faire une boucle de façon à calculer la moyenne des lignes 1 - 9 - 17 - 25 .... jusqu'à la fin de ma colonne, puis la moyenne des lignes 2 - 10 - 18 - 26 .... jusqu'à 8 - 16 - 24 - 32...

    Mon fichier est comme ça;

    sujet 1 Temps 1.
    sujet 1 Temps 2.
    ...
    sujet 1 Temps 8
    sujet 2 temps 1
    ....
    sujet 2 temps 8
    sujet 3 temps 1
    ....

    Mais je sais pas combien je vais avoir de sujets. Donc je voudrais une boucle qui une fois qu'elle a fait le calcul pour mon Temps 1 (pour tous mes sujets), passe au Temps 2 ... jusqu'au Temps 8

    Merci pour votre aide.
    La fonction accumarray devrait faire ça pour toi sans aucune boucle et en 5 lignes de code maxi.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Merci pour vos réponses. J'ai fais un mix de tout je crois et ça marche bien hahah

    Voici les codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for j = 1:length(M)
        valeurstocke = [];   
        for i=j:8:length(M)
            valeur=M(i,:);
            valeurstocke=[valeurstocke;valeur];
        end
     
    TW_torque_EACH_subjects = reshape(M(:,1),2,[]);
     
     
    end
    Celui là, m'affiche 2 lignes de 3 colonnes:

    6 120 1200
    120 100 800

    Donc j'ai fais un deuxième qui m'affiche la moyenne de chaque ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for m = 1:length(TW_torque_EACH_subjects(:,1))
        a = [];   
        for n=m:8:length(TW_torque_EACH_subjects)
            b=TW_torque_EACH_subjects(n,:);
            a=[a;b];
     
            c=mean(TW_torque_EACH_subjects(n,:))
    Dans l'éditeur il m'affiche bien:

    c= 442
    c= 340

    Parfait! MAIS lorsque je vais dans le Workspace et que je clique sur c, il m'affiche uniquement "340" :dry:

    Une petite idée pourquoi ?

    Merciiii

  12. #12
    Invité
    Invité(e)
    Par défaut
    Et si tu remplissais un tableau au lieu de changer son unique valeur à chaque itération ?

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Bonjour,

    Alors je suis arrivé à ce que je voulais avec ce 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
     
     
    M = [TW_max_torque_EACH_subjects];
     
    for j = 1:length(M)
        valeurstocke = [];   
        for i=j:8:length(M)
            valeur=M(i,:);
            valeurstocke=[valeurstocke;valeur];
        end
     
    TW_torque_EACH_subjects = reshape(M(:,1),4,[]); % 8 FOR 8 TIMES (LINES)
    end
     
     
    for n=1:length(TW_torque_EACH_subjects(:,1))
         b=TW_torque_EACH_subjects;
         c(n)=mean(b(n,:));
    end
     
    s=c'
    Il m'affiche bien dans mon workspace:

    442
    340



    Y'a probablement plus simple mais bon je ne fais que débuter...

    Merci pour votre aide en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Incrémenter ligne d'un DataGridView
    Par PA-42 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/01/2010, 23h28
  2. [débutant] problème de boucle/incrémentation
    Par anxious dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/08/2009, 03h25
  3. Boucle: Incrémenter une variable qui soit une cellule
    Par samuel_p dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2009, 14h39
  4. VBA EXCEL : boucle, recherche ligne
    Par sebi78 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/04/2007, 13h02
  5. Incrémenter lignes d'un tableau
    Par skea dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/01/2005, 11h12

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