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 :

Nom de matrice incrementé


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut Nom de matrice incrementé
    Salut,
    j'ai une série de vecteurs que leurs noms fini par un numéro (genre a100,a101,a102...). Je souhaite faire une boucle et utiliser la succession des numéro dans une boucle pour optimiser mon code! merci de proposer une solution

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Points : 843
    Points
    843
    Par défaut
    Bonjour,

    As-tu pensé à regarder la FAQ ?
    ==> http://matlab.developpez.com/faq/?pa...ion_var_A1A2AN
    "Donnez un poisson à un Homme, et il mangera un jour. Apprenez-lui à pêcher, et il mangera tous les jours."

  3. #3
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Merci pour la réponse,
    J'ai le la FAQ et j'ai compris qu'il faut écrire B{1} au lieu de B1 pour incrémenter. j'ai appliqué sur mon code mais il ne reconnait pas la forme!
    mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for w=1991:2007
                    if (R(h,1)==w) 
                        janv{w}=[janv{w} R(h,3)];
                    end
    et le resultat de la compilation:
    ??? Cell contents reference from a non-cell array object.

    Error in ==> SWI_mat at 367
    janv{w}=[janv{w} R(h,3)];
    mes vecteurs c'est de janv1991 jusqu'à janv2007
    merci

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Déjà, il te manque un end qui termine ta boucle for, est-ce que ça change quelque chose ?

  5. #5
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Oui je sais que ça manque un end! mais c'est pas la cause du problème voyons
    en fait, la boucle if est loin d'être terminée c'est pour ça j'ai pas tout copié mais le end existe bien évidemment

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Points : 843
    Points
    843
    Par défaut
    Bonjour,

    Il suffit de lire ce que renvoit MatLab pour comprendre la source de l'erreur : tu essayes de concaténer une variable de type cellule avec une autre qui visiblement est tout autre chose, un scalaire sans doute ou une matrice peut-être.

    Regarde les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    help num2cell
    help mat2cell
    ainsi que ce lien pour voir ce qui te conviendrait le mieux dans ton cas.
    "Donnez un poisson à un Homme, et il mangera un jour. Apprenez-lui à pêcher, et il mangera tous les jours."

  7. #7
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Tu as quoi dans ta variable janv ?

    Tes variables janv1991...janv2007 ne vont pas se transformer par magie en janv{1991} ... janv{2007}.

    Il aurait fallu dès le départ créer un tableau de cellules plutôt que de créer ces variables.

    Pourrais-tu nous montrer plus de code ?
    A mon avis c'est améliorable (la boucle n'est peut-être même pas nécessaire).
    Règles du Forum

    Adepte de la maïeutique

  8. #8
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    La variable janv1991 .. janv 2007 sont des vecteurs qui contiennent des entiers.
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
               if (R(h,2)==1) 
               janv=[janv R(h,3)];
                    for w=1991:2007
                    if (R(h,1)==w) 
                        janv{w}=[janv{w} R(h,3)];
                    end
                    if  isempty(janv{w})
                    janv{w}=zeros(1,1);
                    end
                    end
                    w=1991;
    j'ai besoin d'ajouter un entier pour chaque vecteur! pour cela il me faut l'incrémentation des noms à l'intérieur de la boucle. j'ai bien sur fait l'initialisation de tous les vecteurs qui existent! merci pour la réponse ^^'

  9. #9
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Je t'ai demandé ce qu'est la variable janv.

    Au début tu fais :
    on ne sait pas à quoi a été initialisé janv mais je dirais [] et si R(h,3) est une valeur ou un tableau de nombres de taille 1*n
    alors janv va être un tableau de nombres.

    Du coup si par la suite tu essayes de l'utiliser comme tableau de cellules forcément ça ne va pas fonctionner.


    As-tu compris cette phrase :
    Tes variables janv1991...janv2007 ne vont pas se transformer par magie en janv{1991} ... janv{2007}.
    Règles du Forum

    Adepte de la maïeutique

  10. #10
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Je crois pourtant avoir compris
    janv est un autre vecteur qui n'a rien a voir avec les vecteurs que je veux incrémenter! j'ai initialisé janv et janv1991 .. janv 2007.
    je veux juste incrémenter les vecteurs janv1991 .. janv2007 (en utilisant la succession des chiffres 1991 .. 2007) de façon a ajouter une variable a chaque fois dans ces VECTEURS! (matrice a une colonne )
    voici le code complet:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    dir_fich=pwd;
    dir_sat='C:\Documents and Settings\st\Bureau\ERS\swi\';
    feval('cd',dir_sat);
    filename='lonlat.txt';
    fid=fopen(filename);
    C=textscan(fid,'%n%f%f','delimiter',',','headerLines',1);
    fclose(fid);
    gridp=C{1}; lat=C{3} ; lon=C{2};
    Result=[];
    janv=[];
    fev=[];
    mar=[];
    avr=[];
    mai=[];
    juin=[];
    juill=[];
    aout=[];
    sept=[];
    oct=[];
    nov=[];
    dec=[];
    janv1991=[];
    janv1992=[];
    janv1993=[];
    janv1994=[];
    janv1995=[];
    janv1996=[];
    janv1997=[];
    janv1998=[];
    janv1999=[];
    janv2000=[];
    janv2001=[];
    janv2002=[];
    janv2003=[];
    janv2004=[];
    janv2005=[];
    janv2006=[];
    janv2007=[];
    R1=0;
    g=0;
    w=1991;
    dossier=dir;
    nom_fich=dossier(4).name;
     
        HUM=fopen(nom_fich);
        CellERS=textscan(HUM,'%f%f%f%f%f','delimiter',',','headerLines',6);
        fclose(HUM);
        anneeERS=CellERS{1};
        moisERS=CellERS{2};
        jourERS=CellERS{3};
        HumERS=CellERS{4};
        noisehum=CellERS{5}; %on se'n sert pas
            R=[anneeERS,moisERS,HumERS];
            l=size(R,1);
        for h=1:l 
               if (isnan(R(h,3))~=1) 
                R1=R1+R(h,3);
                g=g+1;
               if (R(h,2)==1) 
               janv=[janv R(h,3)];
                    for w=1991:2007
                    if (R(h,1)==w) 
                        janv{w}=[janv{w} R(h,3)];
                    end
                    if  isempty(janv{w})
                    janv{w}=zeros(1,1);
                    end
                    end
                    w=1991;
    SWImoy=R1/g;
    q=1;
    w=1991;
    for w=1991:2007
        for q=1:12
        IND{w}(q)=(mean(janv{w})-SWImoy)/STD(q);
        end
    end
    a supposé que "janv{w} permet de faire l'incrémentation.
    merci.

  11. #11
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Aïe mes yeux

    Conseil : indente ton code : CTRL+A puis CTRL+I dans l'éditeur, ce sera plus lisible.

    Ce que tu dois comprendre de l'objectif des tableaux de cellules c'est que tu NE dois PAS créer toutes ces variables qui :
    1. ne servent à rien
    2. ne sont pas facilement utilisables

    Tu devrais par exemple faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %Pour les mois :
    mois = cell(1,12);%on crée un tableau de cellules vides de taille 1*12
    %Pour les annees
    vannees = 1991:2007;
    janv = cell(1,length(vannees ));%on crée un tableau de cellules vides de la même taille
    %que le vecteur des années
    Pour la suite j'avour que c'est tellement pas clair que je n'ai pas trop regardé.

    Ah si ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    feval('cd',dir_sat);%QUELLE HORREUR !
    %s'ecrit
    cd(dir_sat);
    %Et encore mieux il faut éviter de faire des CD et utiliser les noms complets
    filename = fullfile(dir_sat,'lonlat.txt');
    Règles du Forum

    Adepte de la maïeutique

  12. #12
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Bien Bien vous avez résolu tout sauf mon problème
    merci pour le soutien pareil

  13. #13
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par Palsajicoco Voir le message
    vous avez résolu tout sauf mon problème
    Euh...ben ton problème n'est pas clair du tout en fait...
    Je ne comprends pas ce que tu veux faire avec tes données.

    Je te dis juste comment les créer de façon "intelligente" (a priori car si ça se trouve tu pourrais même simplement utiliser un tableau de nombres, mais comme tout ça n'est pas très clair...)
    Règles du Forum

    Adepte de la maïeutique

  14. #14
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Bon je tente une dernière chance
    On oubli le code pour le moment, il suffit juste de savoir que j'ai des vecteurs (janv1991, janv1992,janv1993, ... ,janv2007) initialisés vides.J'ai besoin de faire une boucle et les utiliser avec un code optimisé bien sur! de ce fait j'ai besoin de savoir comment jouer sur les chiffres successifs 1991,1992,1993...,2007 dans le nom des vecteurs lui même! c'est à dire passer d'un vecteur à un autre juste en incrémentant la boucle. Je sais que c'est un peu délicat mais j'ai besoin juste de la commande qui permet de reconnaitre un chiffre dans un nom d'une variable qui est ici un vecteur.

  15. #15
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    mais pourquoi veux-tu créer ces vecteurs ????
    Ce n'est PAS DU TOUT efficace.

    On t'explique depuis le début que tu devrais utiliser un tableau de cellules plutôt que plein de variables différentes.

    Entre utiliser janv1991, ...janv2007 et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vannees = 1991:2007;
    janv = cell(1,length(vannees ));%on crée un tableau de cellules vides de la même taille
    %que le vecteur des années
    la différence est que la seconde solution est EFFICACE puisque ensuite tu peux boucler facilement.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for nA = 1:length(vannees)
       janv{nA} = sprintf('contenu de l''annee %d',nA);
    end
    janv{1}
    janv{4}
    %...
    Règles du Forum

    Adepte de la maïeutique

  16. #16
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Merci merci ça aide

  17. #17
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Palsajicoco, pourquoi demandes tu de l'aide si quand on t'en donne tu la refuses?

    La boucle de Caro-Line est evidemment la solution a adopter ! le nom de tes vecteurs sera change exactement de la maniere que tu souhaites...

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

    Je sais que je vais me faire taper sur les doigts mais si tu tiens vraiment à utiliser ta méthode, il existe la fonction
    Je souligne tout de même que la solution de Caroline est bien mieux

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2010, 13h38
  2. Changer nom de matrice
    Par dido_k83 dans le forum MATLAB
    Réponses: 12
    Dernier message: 07/08/2009, 19h13
  3. Incrementer nom de variable
    Par patvador dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/01/2007, 07h10
  4. Incrémenter un n° dans un nom de fichier
    Par pandore dans le forum Fortran
    Réponses: 6
    Dernier message: 03/05/2006, 11h30
  5. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30

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