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 :

Opérations sur les vecteurs


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Opérations sur les vecteurs
    Bonjour,

    j'ai un vecteur comme celui-ci:
    seq = ['1(5:8) 2(5:8) 3(5:8) 4(5:8) 5(5:8) 6(5:8) 7(5:8) 8(5:8) 9(5:8) 10(5:8) 11(5:8) 12(5:8)',100]

    Les nombres avant les parenthèses 1 2 3 4 5... correspondent à des images et les nombres (5:8) veulent dire que l'image correspondant va etre répétée entre 5 et 8 fois.

    j'aurais besoin de mélanger aléatoirement les valeurs de mon vecteur pour obtenir par exemple un résultat comme celui-ci:
    seq = ['3(5:8) 2(5:8) 4(5:8) 1(5:8) 5(5:8) 12(5:8) 6(5:8) 10(5:8) 9(5:8) 11(5:8) 8(5:8) 7(5:8)',100]

    J'ai essayé la fonction randperm mais j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    seq = ['1(5:8) 2(5:8) 3(5:8) 4(5:8) 5(5:8) 6(5:8) 7(5:8) 8(5:8) 9(5:8) 10(5:8) 11(5:8) 12(5:8)', 100]
    seq_2 = seq(randperm(12)) 
     exemple de résultat: seq_2 = :85 ((1:2,)5


    Si vous avez une idée comment faire....

    Merci

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

    Le plus simple est je pense d'utiliser un tableau de cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    seq = {'1(5:8)' '2(5:8)' '3(5:8)' '4(5:8)' '5(5:8)' '6(5:8)' '7(5:8)' '8(5:8)' '9(5:8)' '10(5:8)' '11(5:8)' '12(5:8)'};
    seq_2 = seq(randperm(12))

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Super !!!
    pour ceux que ca peut intéresser pour retrouver mon vecteur original mais randomiser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    seq = {'1(5:8)' '2(5:8)' '3(5:8)' '4(5:8)' '5(5:8)' '6(5:8)' '7(5:8)' '8(5:8)' '9(5:8)' '10(5:8)' '11(5:8)' '12(5:8)'}
    seq_2 = seq(randperm(12))
    seq_2 = [seq_2{1},seq_2{2},seq_2{3},seq_2{4},seq_2{5},seq_2{6},seq_2{7},seq_2{8},seq_2{9},seq_2{10},seq_2{11},seq_2{12}]
    seq_2 = [seq_2, 100]
    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux aussi utiliser strjoin qui t'évitera de recopier tous les seq_2{i}

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Apparemment strjoin n'existe pas sur ma version de matlab (2009) et c'est bien dommage...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Rassure-toi, tu as une version disponible sur le FEX

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    C'est une bonne surprise merci mais est il possible qu'il ne me mette pas une virgule entre mes valeurs mais un simple espace ou rien même à la limite rien du tout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    seq = {'1(5:8)' '2(5:8)' '3(5:8)' '4(5:8)' '5(5:8)' '6(5:8)'}
    seq_2 = seq(randperm(6))
    seq_2 = strjoin(seq_2)
    seq_2 = 4(5:8),5(5:8),2(5:8),3(5:8),6(5:8),1(5:8)
     
    ce que je voudrais:
    seq_2 = 4(5:8) 5(5:8) 2(5:8) 3(5:8) 6(5:8) 1(5:8)
    Dans tous les cas merci, je ne connaissais pas le FEX

  8. #8
    Invité
    Invité(e)
    Par défaut
    Comme on peut le voir dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if nargin < 2, separator = ','; end
    Si le deuxième argument n'est pas spécifié, une virgule est alors utilisée.

    Dès lors que tu spécifies le second argument, tu ne devrais pas avoir de problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strjoin(seq_2, ' ') % espace
    strjoin(seq_2, '') % rien

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Pour la énième fois merci beaucoup.
    Je débute sur matlab (comme tu as pu le deviner) et c'est vrai que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if nargin < 2, separator = ','; end
    ne veut pas dire encore grand chose pour moi

  10. #10
    Invité
    Invité(e)
    Par défaut
    nargin correspond au nombre d'entrées passées à la fonction en cours d'exécution.

    Un appel à strjoin(seq_2) avec un seul argument aura pour effet de laisser non-défini le deuxième argument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function output = strjoin(input, separator)
    Si l'on souhaite pouvoir l'utiliser sans obtenir l'erreur "undefined", il faut lui fixer une valeur dite par défaut. Ce que fait la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if nargin < 2, separator = ','; end
    écrite plus lisiblement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if nargin<2 % si le nombre d'arguments rentrés est inférieur à 2
        separator = ';' % on utilise le séparateur ';' par défaut.
    end

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

Discussions similaires

  1. opérations sur les vecteurs
    Par chooki dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/01/2014, 17h00
  2. [OpenGL/C++] Opérations sur les Textures
    Par Bob.Killer dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/08/2005, 10h27
  3. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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