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 :

Remplacement de NaN par la moyenne des plus proches voisins


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Remplacement de NaN par la moyenne des plus proches voisins
    Bonjour,

    Je suis toute nouvelle sur le forum et ravie de faire partie de l'aventure!

    Voila mon soucis:

    J'aimerais remplacer les NaN d'une matrice A=[0 0 0 0 0;0 0 45 48 NaN;0 43 42 NaN 0;50 NaN NaN NaN 45]; par la moyenne des plus proches voisins.

    Auriez-vous des suggestions?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Il nous faudrait une définition exacte de ce que entends pas "plus proches voisins"

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 307
    Points : 52 887
    Points
    52 887
    Par défaut
    Une première idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    A = [0 0 0 0 0;0 0 45 48 NaN;0 43 42 NaN 0;50 NaN NaN NaN 45]
     
    idx = find(~isnan(A(:)));
     
    [i,j] = ind2sub(size(A),idx);
     
    [yi,xi] = meshgrid(1:size(A,2),1:size(A,1));
     
    Ai = griddata(i,j,A(idx),xi,yi)
    donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    A =
     
         0     0     0     0     0
         0     0    45    48   NaN
         0    43    42   NaN     0
        50   NaN   NaN   NaN    45
     
     
    Ai =
     
             0         0         0         0         0
             0         0   45.0000   48.0000         0
             0   43.0000   42.0000   21.0000         0
       50.0000   48.7500   47.5000   46.2500   45.0000

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    C'est un peu complique :

    Tout dépend de la position du NaN. Dans l’idéal, les plus proches voisins sont les valeurs formant un 'carre' (3 lignes * 3 colonnes) autour de la valeur a laquelle on s’intéresse: Si le focus est sur A(3,2)=43, alors le 'carre' qui l'entoure serait :
    0    0     45
    0    43    42
    50  NaN   NaN
    Mais, aux bords de la matrice, le 'carre' de ne vaudrait que (2 lignes * 2 colonnes)

    Exemples : Si i et j sont les indices du NaN se trouvant à A(4,2); j'aimerais remplacer ce NaN par la moyenne des valeurs non nulles a i-1 et j-1:

    Pour :
    0    43 
    50  NaN
    Ici le NaN serait valeurnan1= (50+43)/2= 46.5.

    Connaissant à présent valeurnan1; on pourrait de manière récursive connaitre le NaN a A(4,3) par:
    43  +  42         
        +
    46.5  NaN
    Ici valeurnan2 = (43+42+46.5)/3= 43.833 .

    Je ne sais pas du tout si c'est clair !

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour cette premiere reponse qui interpole ligne par ligne.
    Y aurait-il egalement un moyen pour interpoler dans toutes les directions, comme le montre l'exemple ci-dessus?

    Merci par avance

Discussions similaires

  1. Point d'intérêt :Recherche des plus proches voisins
    Par Yannok dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/07/2012, 22h25
  2. Réponses: 3
    Dernier message: 09/12/2010, 13h38
  3. La moyenne des plus grandes valeurs d'un champ
    Par aiss57 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/06/2009, 11h56
  4. Recherche des plus proches voisins dans un espace variable à K dimensions parmis N
    Par JeromeBcx dans le forum Algorithmes et structures de données
    Réponses: 34
    Dernier message: 26/06/2008, 17h46
  5. Tri par la moyenne des valeurs de champs ?
    Par rozwel dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/01/2005, 18h35

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