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 :

Créer un vecteur de texte pour y faire appel


Sujet :

MATLAB

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Créer un vecteur de texte pour y faire appel
    Bonjour,

    Je souhaiterai faire en sorte qu'une variable soit un vecteur dont chacun des éléments est un texte (plus précisément un format AAAA/MM/JJ HH:MM importé depuis excel). J'aurai ainsi un vecteur du type :

    2008/02/09 03:37
    .
    .
    .
    2008/02/25 05:56

    J'aimerai ensuite faire appel à une valeur précise du vecteur afin de la ranger dans un tableau. Le tableau correspond à ce qui suit :

    Le vecteur d'entrée est principalement composé de 0 mais possède quelques suites de valeurs non nulles. Les vecteurs de sortie correspondent aux suites de valeurs non nulles. Je souhaiterai aussi pouvoir connaitre leur position dans le vecteur d'origine.
    Exemple :
    V = 00...0Y1Y2..Yn00.......0Yn+1..Yn+n00.....0Y2n... etc.
    devient
    Y1Y2..Yn [position de Y1 dans V, position de Yn dans V]
    Yn+1..Yn+n [position de Yn+1 dans V, position de Yn+n dans V]

    Première fonction : fonction de tri

    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
    function [ M ] = tri( V )
    k=1;
    l=1;
    for n=1:size(V)-1
    if V(n)==0 && V(n+1)~=0
        M(l,k)=V(n+1);
        l=l+1;
    end
    if V(n)~=0 && V(n+1)~=0
        M(l,k)=V(n+1);
        l=l+1;
    end
    if V(n)~=0 && V(n+1)==0
        k=k+1;
        l=1;
    end
    end
    M;
    end


    Deuxième fonction : tableau donnant le nombre de valeurs de chaque petit vecteurs, le maximum et leur somme (multipliée par 60 dans mon cas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function [ T ] = tabval( M )
    for k=1:size(M,2)
    T(1,k)=nnz(M(:,k));
    T(2,k)=max(M(:,k));
    end
    T(3,:)=sum(M*60); 
    end
    La finalité est donc de faire correspondre les dates des premiers et derniers éléments non nuls de chaque vecteur à leur colonne correspondante.

    Comment m'y prendre ?

    Merci !

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

    Une façon d'obtenir les indices des valeurs non-nulles est d'utiliser la fonction find.
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    V = [0 0 1 0 2 0 3 0 4 5 0 6];
    idx = find(V)
    V(idx)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    En lisant l'aide MATLAB je n'ai pas très bien saisi s'il est possible d'appliquer 'find' à une certaine fourchette de lignes d'un vecteur.

    Un autre moyen serait peut être de réinitialiser à 0 la valeurs l du vecteur d'origine dès qu'elle est copiée dans la matrice des sous-vecteurs.

    Je pourrai aussi incrémenté un pas qui serai entré dans une nouvelle matrice pour y faire appel ensuite.

    Mais la question sur l'utilisation d'une matrice "texte" reste entière : elle me simplifierait bien la vie. En effet mon vecteur d'origine a environ 85 000 lignes pour deux mois de simulations. Du coup sur une simulation (future) de deux ans, ça risque de devenir très long de comparer ><.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Aphelio Voir le message
    En lisant l'aide MATLAB je n'ai pas très bien saisi s'il est possible d'appliquer 'find' à une certaine fourchette de lignes d'un vecteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    debut = 3; fin = 10;
    V = [0 0 1 0 2 0 3 0 4 5 0 6];
    idx = find(V(debut:fin))
    V(debut+idx-1)
    Citation Envoyé par Aphelio Voir le message
    Mais la question sur l'utilisation d'une matrice "texte" reste entière
    >> Tableaux de cellules + doc cellfun devraient t'aider.
    Dernière modification par Invité ; 07/05/2011 à 21h14.

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ça marche, je vais étudier ça !

    Merci =)

Discussions similaires

  1. découper un texte pour en faire plusieurs enregistrements
    Par moulinmax dans le forum VBA Access
    Réponses: 12
    Dernier message: 17/12/2008, 20h26
  2. [vb6]extraire text pour créer base de doneé
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 06/10/2007, 00h28
  3. Réponses: 8
    Dernier message: 02/02/2007, 09h26
  4. utiliser données texte pour faire des calculs
    Par sarah67 dans le forum Access
    Réponses: 20
    Dernier message: 06/02/2006, 14h09
  5. Réponses: 8
    Dernier message: 06/12/2005, 11h33

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