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 :

Moyenne conditionnelle (moyenne de x si x>y)


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut Moyenne conditionnelle (moyenne de x si x>y)
    Bonjour je cherche à calculer

    mean(x l x>y)

    J'ai essayer la façon bourrin, avec une boucle if le problème c'est que X est un vecteur de 1000 double :

    x = 0.01
    0.02
    0.03

    et

    y = 0.04
    0.03
    0.01

    Je voudrais qu'il prenne chaque valeur de x et la compare à la première de Y , puis chaque valeur de x et la compare à la seconde de Y.

    En gros j'ai écrit un truc du style, mais j'ai du mal pour le décallage de la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for i = 1:length(X) 
    for j = 
    if X(i,1) < Y(j,1) 
    X(i,1)=X(i,1); 
    else 
    X(i,1)=0;
    Som = sum(X(:,1));
    ES = mean(Som);
    Je ne sais pas trop quoi mettre dans la boucle j pour qu'il décalle de 1 une fois que tous les X sont "balayés"

    Une idée ?
    Merci

    Edit:

    Je teste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    k=1
    for i = 1:length(X) 
     
    if X(i,1) < Y(k,1) 
    X(i,1)=X(i,1); 
    else 
    X(i,1)=0;
    k=k+1
    Som = sum(X(:,1));
    ES = mean(Som);

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    J'ai pas entièrement saisi ton problème mais je pense avoir trouvé une solution un peu plus simple quand même.

    Si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idx = zeros(length(X),lengh(Y))
    for i = 1:length(X)
       idx(i,:) = A(i)>B
    end
    alors tu pourras dire que si une ligne de idx ne comporte que des 1 alors X(i) est supérieur à tout élément de Y. Tu n'as plus qu'à extraire chaque élément correspondant et en faire la moyenne.

    Pour regarder si une ligne complète est égale à 1 je suppose qu'il y a une multitude de solution. D'instinct j'aurai regardé si la moyenne de chaque ligne est égale à 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    c=1;
    for j =1:size(idx,1)
    if mean(idx(j,:) == 1
       idx2(c) = j;
    c=c+1;
    end
    Et enfin tu peux faire la moyenne de tes X correspondant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    moyenne = mean(X(idx2(:)))

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 883
    Points : 3 431
    Points
    3 431
    Par défaut
    salut

    ce qui peux s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idx = x>y;
    moyenne = mean(x(idx));
    voir encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    moyenne = mean(x(x>y));
    voir la

    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
      Som = sum(X(:,1));
    ES = mean(Som);
    revient à écrire ES = sum(X(:,1)); ... et donc tu as calculé une somme et non une moyenne !

    fabien

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    J'ai encore du débutant à mettre sur mes prochains topics!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    impeccable merci pour votre aide

Discussions similaires

  1. Moyenne conditionnelle
    Par ArmandF dans le forum MATLAB
    Réponses: 6
    Dernier message: 11/07/2013, 17h11
  2. Réponses: 6
    Dernier message: 25/10/2011, 09h19
  3. moyenne de moyennes
    Par hologram dans le forum VBA Access
    Réponses: 11
    Dernier message: 08/11/2010, 15h29
  4. Moyenne de moyenne (AVG de AVG)
    Par C45T0R dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2009, 12h11
  5. moyenne de moyennes
    Par piscine dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/05/2005, 23h09

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