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 :

Calcul par indexage


Sujet :

MATLAB

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut Calcul par indexage
    Bonjour,

    J'ai une matrice X (4x2) que j'aimerais normaliser colonne par colonne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    X =
     
         1     2
         3     4
         5     6
         7     8
    J'aimerais donc diviser chaque colonne par le max de celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ii=1:2
    Xnew(:,ii) = X(:,ii)./max(X(:,ii));
    end
    Mais est il possible de se passer de la boucle?

    Merci
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

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

    Une solution avec BSXFUN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bsxfun(@rdivide,X,max(X))
    Une autre avec REPMAT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X ./ repmat(max(X), size(X,1), 1)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Merci ! parfait.

    Désolé mais j'aurais une autre question qui reste dans la même logique, un peu plus compliqué cependant. J'aurais besoin de trouver la 1er maximum de vecteurs sous forme matricielle.

    Le code ci-dessous marche bien pour un vecteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    A=[ 1 2 3 4 5 4 3 6 6 13] ;
     
    for ii=1:numel(A)
        Diff = A(ii+1)-A(ii);
        if Diff < 0;
           idxMax_A = ii ;
            break
        end
    end
     
    idxMax_A
    J'aimerais faire la même chose pour plusieurs vecteur mis dans une seule matrice.

    Pas de problème avec double boucle :

    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
    B=[ 1 4 7 3 5 12 ; 1 2 3 4 1 10 ; 5 6 2 4 6 9];
    B=B';
     
    for jj=1:size(B,2)
     
        for kk = 1:size(B,1)
            Diff = B(kk+1,jj)-B(kk,jj);
     
            if Diff < 0;
                idxMax_B(jj) = kk ;
                break
            end
     
        end
    end
     
     idxMax_B
    Mais est il possible de faire le dernier code sans reboucler sur chaque colonne (virer la boucle jj) ?

    Merci d'avance
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  4. #4
    Invité
    Invité(e)
    Par défaut
    Petite rectification pour commencer: for ii=1:numel(A)-1 à cause de: Diff = A(ii+1)-A(ii);. De même pour la double boucle.

    Sinon, pour ton problème, tu peux te passer des deux boucles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    B=[ 1 4 7 3 5 12 ; 1 200 3 4 100 10 ; 5 6 2 4 6 9];
    B = B.'; % Quelle est la différence entre ' et .' ?
    D = diff(B);
    [pasbesoin idxMax_B] = max(D<0)
    Ou sans passer par la transposée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    B=[ 1 4 7 3 5 12 ; 1 200 3 4 100 10 ; 5 6 2 4 6 9];
    D = diff(B,1,2);
    [pasbesoin idxMax_B] = max(D<0,[],2);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Merci de ta réponse.

    J'aurais aussi appris qu'on pouvait mettre des conditions dans la fonction max... chose qui n'est pas explicité du tout dans la doc..
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

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

Discussions similaires

  1. Requête syntaxe de calcul par comparaison
    Par valalu dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 11h41
  2. Réponses: 3
    Dernier message: 24/03/2007, 13h42
  3. Saisie de calcul par l'utilisateur
    Par zenaf dans le forum C
    Réponses: 11
    Dernier message: 26/10/2006, 19h42
  4. Pb Requetes et calcul par condition
    Par flagfight dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 10h30
  5. [Access] Calcule par ligne dans une requête
    Par Belze dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2006, 09h09

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