Plot/Extraction data avec condition sur texte sans boucle
Bonjour,
je suis confronté à un gros problème qui est sans doute très simple à résoudre pour les experts mais je débute avec matlab et avec la programmation ...
Concrètement:
Soit une matrice M(n,m) (en fait n=m=500) soit 250 000 cellules
Pour certaines de ces cellules j’ai des informations provenant de deux fichiers distincts.
Le premier fichier, le fichier A, correspond à un vecteur de 250 000 lignes chaque cellule contient une valeur numérique. Ce fichier permet donc de caractériser l’ensemble de mes cellules de la matrice M.
Le deuxième fichier, le fichier B, correspond à un tableau avec 100 000 lignes et 9 colonnes.
Les deux premières colonnes sont les coordonnées dans ma matrice M de 100 000 cellules prises au hasard parmi les 250 000 cellules.
Les autres colonnes sont des indices (valeur numérique), des descriptions (chaîne de caratères ou code alphanumérique) caractérisant les mêmes 100 000 cellules.
J’ai importé ce deuxième fichier B
Avec la formule
Code:
1 2
|
B = textscan(fopen('fichierB'),'%d %d %d %d %s %s %d %s %s','delimiter','\t'); |
J’obtiens un tableau
Avec 9 colonnes qui correspondent à
Coord X coord Y indice1 indice2 descrition1 description2 nbr1 description3 description4
Ce que je souhaite c’est « ploter » ou récupérer dans un tableau les valeurs du fichier A en fonction de certaines conditions (sur l’ensemble des colonnes) dans le fichier B (mon tableau) mais sans loupe.
J’ai créer pour cela un vecteur Vlien qui me permet d’avoir la correspondance entre les deux fichiers.
Code:
1 2
|
Vlien = B{1}+1+B{2}.*500; |
Ensuite j’arrive à ploter mes valeurs de A en fonction de l’indice1 (colonne 3 du tableau B) en prenant les valeurs de la colonnes 4 correspondantes pour abscisses et les valeurs du vecteur A correspondantes comme ordonnées.
Code:
1 2 3 4
|
Valeur_indice1=4; %% lindice1 correspond à la colonne 3 du fichier B
figure;
plot(B{4}(B{3}==Valeur_indice1, A(Vlien(B{3}==Valeur_indice1 )), '.') |
J’ai également pu filtrer mes données en fonction des valeurs de la colonnes 4 qui sont également des valeurs numériques.
Le problème c’est que je cherche à poser des conditions sur les colonnes avec autre chose que des chiffres. Mais j'obtiens des erreurs...
Alors j’ai essayer d’utiliser des fonctions comme strcmp pour remplacer le == mais je n’ai pas réussi à faire fonctionner. Cela me donne au mieux le numéro de la ligne dans le tableau B de toutes les occurrences.
Malgré plusieurs tests, j’obtiens des
Code:
??? Undefined function or variable...
ou des
Code:
1 2
| ??? Undefined function or method 'eq' for input arguments of type
'cell'. |
J’atteins là les limites de mes compétences et je pense avoir besoin de votre aide. Alors si quelqu’un à une idée, une suggestion ? je l’en remercie d’avance.
A très bientôt, j’espère
H.
2 pièce(s) jointe(s)
PLOT/Extraction avec condition sur texte sans boucle Info supplémentaires
Bonjour,
Tout d’abord merci pour vos réponses. Effectivement j’aurais mieux fait de mettre directement les scipts qui ne marchent pas
Pour rappel ce script marche
Code:
1 2 3 4 5 6
|
indice1=4;
deb=12;
fin=1000;
figure;
plot(FichierB{4}(FichierB{3}==indice1 & FichierB{4}>= deb & FichierB{4}<=fin),(FichierA (Vlien(FichierB{3}==indice1 & FichierB{4}>= deb & FichierB{4}<=fin))), '.') |
ce script me donne une figure comme je souhaite avoir dans un premier temps.
Alors que
Code:
1 2 3 4
| description3='005w';
figure;
plot(FichierB{4}(FichierB{8}==description3 ),FichierA (Vlien(FichierB{8}==description3)), '.') |
me donne
Code:
1 2 3
|
??? Undefined function or method 'eq'
for input arguments of type 'cell'. |
Et la fenêtre des figures qui s’ouvre reste grise et vide ?
En fait, j’aimerais pouvoir choisir les valeurs de mon FichierA à spoter en fonction des différentes valeurs du fichierB. Pour une ou plusieurs conditions sans avoir besoin de faire des boucles…et avec des condition sur des chaînes de caractères comme sur des nombres...
Par la suite je souhaiterais les mettre dans un tableau surtout que je vais avoir plusieur fichierA (FichierA1, Fichier A2, Fichier A3…) pour lesquels ce serait génial de pouvoir enregistrer dans un tableau les valeurs de certains spots…. mais bon nous n'en somme pas là…pour l’instant je n’arrive pas sélectionner ce que je voudrais.
j’ai essayé de travaillé sur ma description3 avec
Code:
1 2 3 4 5 6
|
description3=cellstr(description3)
mais le message ??? Error using ==> cellstr at 34
Input must be a string. |
J’ai l’impression que c’est une histoire de format… mais j’ai du mal trouver la solution…
Alors si ces explications vous donnent de nouvelles idées je suis preneur, merci d’avance…
A tres bientôt et encore merci pour le temps passé sur mes longs messages.
PS :je joins des fichiers pour tester les scipts (j'ai dû les couper espérons que cela ne crée pas d'autres problèmes...)