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 :

Recherche de valeurs dans un tableau


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 60
    Points : 33
    Points
    33
    Par défaut Recherche de valeurs dans un tableau
    Bonjour,

    J'aurais également une question concernant les indices. En fait, j'ai une matrice nx3 dans laquelle est stockée environ 140000 points. Il s'agit d'une surface, donc par exemple, différents x peuvent avoir la même coordonnée y.

    Je souhaite en fait trouver l'indice le plus proche d'une certaine valeur de y (jusque là, rien de trop compliqué), cependant je veux que cet indice corresponde également à une certaine valeur minimum pour x car je veux utiliser x et z par la suite.

    J'ai donc essayé ce code, mais il me renvoie un index avec des valeurs un peu aléatoire, mais croissantes. J'ai essayé de varier les exigences (en mettant des conditions où je suis certain qu'il y a des points) mais ça ne marche toujours pas.

    Avez-vous une suggestion?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % recherche de l'indice avec la valeur la plus proche de y_ref/2
    for l = 1 : length(v(:,1))
        if v(l,1) > 5
            index =  find(abs(v(:,2)-y_ref/2) < 10);
        else 
            index = 0;
        end
    end
    Ici, v(:,1) correspond à x, v(:,2) à y et v(:,3) à z.

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    ce qui répond le mieux à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [~, index] = min(abs(v(v(:,1)>5,2)-y_ref/2));

  3. #3
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    je ne sais aps si cela s'approche de ta question que je n'ai pas comprise à 100%. le code ci-dessous recherche le point le plus proche, en (x,y) du point (0.5, 0.5), parmi les points donnés dans le tableau data.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data = rand(1000, 3) ;
    point = [0.5, 0.5] ;
    [unused, index] = min(sum((bsxfun(@minus, data(:,1:2), point)).^2, 2)) ;
    disp(data(index, :))
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour votre aide. Cependant, ce n'est pas tout à fait ce que je recherche.

    En fait j'ai une grande matrice avec des coordonnées en x, y et z. Je veux trouver l'indice avec le point qui est le plus proche de y_ref/2, mais avec des conditions qu'en cet indice, les points x et z soient compris par exemple entre 9 et 15. Est-ce possible?

    Merci pour votre aide!

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [~, index] = min(abs(v(v(:,1)>=9 & v(:,1)<=15 & v(:,3)>=9 & v(:,3)<=15,2)-y_ref/2));

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci, par contre ça ne fonctionne pas...

    Si j'ai bien compris, il recherche les indices possibles avec les conditions pour x et z, et ensuite, il prend l'indice parmi ceux sélectionnés avec la valeur la plus proche de y_ref/2?

    J'ai contrôlé plusieurs fois manuellement et il y a plusieurs indices qui pourraient correspondre, donc le problème ne vient pas du fait qu'il n'en trouve pas...

    Une idée d'où peut provenir ce problème?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    en effet je suis allé trop vite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    idxContraintes = v(:,1)>=9 & v(:,1)<=15 & v(:,3)>=9 & v(:,3)<=15;
    [~, idxMinVlimite] = min(abs(v(idxContraintes ,2)-y_ref/2));
    if ~isempty(idxMinVlimite)
      index = find(idxContraintes);
      index = index(idxMinVlimite);
    else
     %pas de solutions
    end
    sinon tu as bien compris le raisonnement

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Génial!

    Merci beaucoup pour ton aide!

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    en plus propre et plus juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    idxContraintes = find(v(:,1)>=9 & v(:,1)<=15 & v(:,3)>=9 & v(:,3)<=15);
    if ~isempty(idxContraintes)
      [~, idxMinVlimite] = min(abs(v(idxContraintes ,2)-y_ref/2));
      index = idxContraintes (idxMinVlimite);
    else
     %pas de solutions
    end

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci!!!

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

Discussions similaires

  1. Recherche de Valeurs dans un Tableau
    Par justin74 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/06/2011, 19h36
  2. Recherche une valeur dans un tableau ehouée
    Par étoile de mer dans le forum Débuter
    Réponses: 3
    Dernier message: 03/01/2010, 18h25
  3. Recherche de valeurs dans un tableau
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/10/2008, 23h08
  4. rechercher plusieurs valeurs dans un tableau
    Par biche1 dans le forum Excel
    Réponses: 2
    Dernier message: 18/09/2008, 15h28
  5. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 14h23

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