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 :

Trouver une ligne [Débutant]


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 Trouver une ligne
    Bonjour à tous,

    Voici mon problème : J'ai deux fichiers avec des temps et des températures. J'aimerais les regrouper et ne faire qu'un seul fichier. Cependant, les temps ne correspondent pas tout à fait. Du coup, je veux prendre la ligne de température du fichier 1 avec le temps le plus proche de celui du fichier 2. J'ai essayé de faire ce code, mais cela ne fonctionne pas. Les deux fichiers ont des tailles différentes. Je voudrais comme base le temps du fichier 2. Est-ce que la recherche d'indice va me donner l'indice du fichier 1 ou du fichier 2?

    J'espère que c'est plus ou moins clair... Voici mon code. Merci beaucoup pour votre aide!

    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
    18
     
    file1 = dlmread('TPL91_Neue_Gr1.txt');
    file2 = dlmread('TPL91_Neue_Gr2.txt');
    nb1 = size(file1);
    nb2 = size(file2);
     
    time1 = file1(:,1);
    time2 = file2(:,1);
     
    TempData = zeros(nb1(1),nb1(2)+nb2(2)-1);
    idx = zeros(nb2(1),1);
     
    for i = 1 : nb2(1)
        idx(i) = find(min(abs(time2(i)-time1(:))));
        TempData(i,1) = time2(i);
        TempData(i, 2:nb1(2)) = file1(idx(i), 2:nb1(2));
        TempData(i, nb1(2)+1:nb1(2)+nb2(2)-1) = file2(i, 2:nb2(2));
    end
    En lançant ce code, j'obtiens l'erreur suivante. Mais je ne vois pas pourquoi idx aurait plus d'une valeur, à moins qu'il y ait exactement la même différence de temps...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    In an assignment  A(I) = B, the number of elements in B and I must be the same.
     
    Error in TPL91_Neue (line 19)
        idx(i) = find(min(abs(time2(i)-time1(:))));

  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

    tout d'abord je te déconseille cette méthode et te conseille plutôt de charger tes deux données avec leur vecteur temps respectif puis de construire des nouveaux vecteurs valeurs sur un même vecteur temps obtenu par exemple par l'union des deux
    les valeurs manquantes pourraient être reconstruite par interpolation (interp1) ou échantillonnage (resample) voir mise à NaN si tu veux garder que des valeurs issues de mesures
    ensuite ca sera très simple de concaténer tout ca

    sinon remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx(i) = find(min(abs(time2(i)-time1(:))));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [~, idx(i)] = min(abs(time2(i)-time1(:)));
    et attention, il peut y avoir plusieurs réponses !! (dans les deux cas) et c'est la source de ton pb
    pour n'en avoir qu'une, rajouter les argument 1,'first' dans le find par exemple

  3. #3
    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
    Effectivement, ta méthode paraît peut-être plus adaptée. Je vais essayer de faire ça. Merci pour ton aide!

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

Discussions similaires

  1. Trouver une ligne contenant des valeurs
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/09/2008, 21h44
  2. trouver une ligne totalement vide , gestion d'erreur
    Par n'anneso dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2008, 21h32
  3. [Aide]Comment trouver une ligne entièrement vide
    Par mickdu90 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 17/08/2007, 10h45
  4. Trouver une ligne dans un fichier d'adresses
    Par geok120 dans le forum C
    Réponses: 12
    Dernier message: 04/05/2007, 12h09
  5. Réponses: 3
    Dernier message: 21/01/2004, 08h47

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