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 :

Fractionner un vecteur d'entier en décimaux


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut Fractionner un vecteur d'entier en décimaux
    Bonjour,

    J'ai un vecteur avec plusieurs valeurs identiques pour des indices différents.
    J'aimerais que ce vecteur conserve sa dimensions, mais que les valeurs soient plus précises et donc toutes différentes.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    1	 -->	1
    1	 -->	1.25
    1	 -->	1.5
    1	 -->	1.75
    2	 -->	2
    2	 -->	2.33
    2	 -->	2.66
    3	 -->	3...
    Je vous remercie

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

    Une façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    V = [1 1 1 1 2 2 2 3];
    dV = diff([0 V]);
    I  = find(dV);
    dI = diff(I);
    V2 = zeros(1,length(V));
    for i = 1:length(I)-1
        V2(I(i):I(i+1)) = V(I(i)):1/dI(i):V(I(i+1));
    end

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    une autre façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = [1 1 1 1 2 2 2 3];
    [b i j] = unique(A,'first');
    v = interp1(i,b,1:length(A))
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    J'avais réussi à peu près en faisant ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    d1bis(1)=d1(1);
        d4(i)=unique(d1(i));
        x(i)=histc(d1(:),d4(i));
        inc(i)=1/x(i);
        if d1(i)~=d1(i-1)
        d1bis(i)=d1(i);
        else
        d1bis(i)=d1bis(i-1)+inc(i);
        end
    Mais il y avait quelque valeurs incohérentes, notamment lorsque mon vecteur fait un "saut" de valeur (d1(i)= 215 et d1(i+1)=354 par exemple), j'obtiens pour d1bis(i) des valeurs comme 215,5 alors que j'aimerais m'arrêter à 215.

    La méthode de Magelan fonctionne mieux, j'obtiens juste des NaN en fin du nouveau vecteur (à partir du moment ou max(d1) est atteint, les valeurs suivantes sont des NaN).

    J'obtiens un message d'erreur pour la méthode de Winjerome
    CAT dimension
    Merci de vos réponses en tout cas

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par nilsmatlab Voir le message
    La méthode de Magelan fonctionne mieux, j'obtiens juste des NaN en fin du nouveau vecteur (à partir du moment ou max(d1) est atteint, les valeurs suivantes sont des NaN).
    Comme indiqué dans la doc, il suffit de mettre l'option d'extrapolation des valeurs hors domaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v = interp1(i,b,1:length(A),'linear','extrap')
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 46
    Points
    46
    Par défaut
    Je reviens vers vous sur ce sujet, j'ai adapté le code de magelan à ma simulation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [b i j] = unique(d1,'first');
    d1bis = interp1(i,b,1:length(d1));
    Dans un fichier .m classique le code fonctionne et j'obtiens les résultats attendus.
    Mais lorsque j'inclus ce code dans mon interface GUI, la simulation ne se stoppe plus.

    Avez vous une idée d'où pourrait provenir cette erreur ?

    Autre soucis, j'obtiens des NaN pour toute les valeurs suivantes d1bis=max(d1).
    Si ce n'est qu'une seule valeur je peux associer une valeur pour extrapoler, mais lorsque j'ai plusieurs NaN, j'aimerais faire comme ci dessous.

    d1 = [0 0 1 1 1 1 ..... 3086 3086 3086]
    d1bis = [0 0.5 1 1.25 1.5 1.75 ..... 3086 NaN NaN] (Ce que j'obtiens)
    d1bis = [0 0.5 1 1.25 1.5 1.75 ..... 3086 3086.1 3086.2] (Ce que j'aimerais obtenir)

    Je me sers de d1bis pour une interpolation d'où l'importance d'avoir des valeurs distinctes.

    Je vous remercie

Discussions similaires

  1. Export excel - entiers et décimaux
    Par ludivine666 dans le forum SAS Base
    Réponses: 1
    Dernier message: 29/01/2013, 17h50
  2. Addition avec nombres entiers et décimaux
    Par ariuss dans le forum Débuter
    Réponses: 3
    Dernier message: 11/10/2009, 21h55
  3. Réponses: 4
    Dernier message: 30/04/2008, 10h02
  4. Creation d'un vecteur d'entiers aleatoires compris entre 0 et 72:
    Par MiXinG dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 22/03/2008, 17h30
  5. Réponses: 6
    Dernier message: 03/11/2006, 11h55

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