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 :

Convertion lettres vers chiffres et inversement [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Convertion lettres vers chiffres et inversement
    Bonjour à tous,

    Je travaille actuellement sur un projet dans lequel je dois importer des données d'un fichier .text dans une matrice.
    Pour cela, j'ai utilisé importdata.
    Le fichier est principalement composé des lettres A, T, G, C, et N.
    J'aimerais convertir chacune de ces lettres en chiffres (A -> 1, T->2...).
    Est-ce possible de la faire sous matlab? Si oui, quelqu'un pourrait-il m'expliquer comment faire?

    Merci d'avance, je suis vraiment en pleine détresse!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une façon de faire en utilisant l'indexage logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    L = 'ATCCNCAGGNAN';
    C = zeros(size(L));
    C(L=='A') = 1;
    C(L=='T') = 2;
    C(L=='G') = 3;
    C(L=='C') = 4;
    C(L=='N') = 5;

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide.

    Malheureusement, je reçois une erreur quand j'exécute la commande:
    undefined function or method 'eq' for input arguments of type 'cell'.
    Voici mon programme, je ne comprends pas l'erreur:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    clear all
    clf
     
    % Importation du fichier fasta du chromosome 22 dans la matrice a
     
    %%a =
    %%importdata('/mnt/454/Altaiensis/users/michael/bam_files/2Cambodian/seq_by_chr/MMS13_HGDP00711_Cambodian.q30_ec1.0_rmdup.hg18.chr22.fa');
     
    a = importdata('/r1/people/claire_jardet/Desktop/MMS13_HGDP00711_Cambodian.q30_ec1.0_rmdup.hg18.chr22.fa');
     
    % Definition de la matrice gen contenant la seq du chr 22 sous forme de
    % chiffres
     
    gen = zeros(size(a));
     
    % Conversion des bases en chiffres
     
    gen(a=='A')=1;
    gen(a=='T')=2;
    gen(a=='G')=3;
    gen(a=='C')=4;
    gen(a=='N')=0;
     
    % Affichage de la matrice gen
     
    gen
    Une idée salvatrice?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu as cette erreur car ta variable a est un tableau de cellules.
    Pourrais-tu montrer un aperçu de son contenu?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Je ne sais pas si c'est de ça dont tu parles, mais voici un aperçu de ce que je veux convertir en série de chiffres:

    'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
    'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
    'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
    'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
    'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'
    'NNNNNNNNNNNTGNTGTGTTGAAGCAATCAGGTCAGTGGTCTTATTGTGTTGTTNATAAN'
    'AGTNNCCATTAGGNANANANGNCCATATCCATGTAAATTAACATTAAAATTTTCNTTGAT'
    'CACACTAACCTCGTTTTAGTTGCTCAGCAGCCACATGTACCTAGTGGCTACTGTATTGCA'
    'CAGCACNAATTNTCATTATTGCANANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTNNN'
    'NTNNNNNCNNCTTCTNGATTTGCTTCACTGTTCTCTTATGTTGTTGTGTAACTCATTAAA'

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est bien cela
    Dans ce cas, tu peux faire une simple conversion en char au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    a =char(a);
    gen = zeros(size(a));
    gen(a=='A')=1;
    gen(a=='T')=2;
    gen(a=='G')=3;
    gen(a=='C')=4;
    gen(a=='N')=0;

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    C'est parfait, ça marche enfin!!!

    Merci beaucoup pour ton aide!

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Tout compte fait, encore une petite question: y a-t-il un moyen d'importer le fichier .txt dans un vecteur plutôt que dans une matrice?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui tu peux le faire avec les fonction fopen/fscanf/fclose.
    Ou tu peux aussi utiliser la fonction doc reshape sur ta matrice.

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup!

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    L = 'ATCCNCAGGNAN';
    C = zeros(size(L));
    C(L=='A') = 1;
    C(L=='T') = 2;
    C(L=='G') = 3;
    C(L=='C') = 4;
    C(L=='N') = 5;
    Ou en une seul ligne avec ISMEMBER :
    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
     
    >> L = 'ATCCNCAGGNAN'
     
    L =
     
    ATCCNCAGGNAN
     
    >> [b,b] = ismember(L,'ATGCN')
     
    b =
     
         1     2     4     4     5     4     1     3     3     5     1     5
     
     
    b =
     
         1     2     4     4     5     4     1     3     3     5     1     5
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Dut Voir le message
    Ou en une seul ligne avec ISMEMBER :
    Bien vu
    Mais vu la petite modification de Clarinette95 entre temps, il faudrait un peu réordonner les lettres et retrancher 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    L = 'ATCCNCAGGNAN';
    [b b] =ismember(L,'NATGC');
    b-1
     
         1     2     4     4     0     4     1     3     3     0     1     0

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Nouvelle petite question :

    J'ai maintenant obtenu une matrice (de 6 colonnes et d'un nombre variable de lignes) constituée de 0, 1, 2, 3, et 4.
    Est-il possible de ne reconvertir que les chiffres des 5 premières colonnes en letttres?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Tu ne pourras pas avoir des lettres et chiffres dans une matrice, il te faut pour cela utiliser des tableaux de cellules.
    Mais tu peux très bien stocker cette reconversion dans une nouvelle variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    M = randi(5,10,6)-1;
    lettres = 'NATGC';
    lettres(1+M(:,1:5))

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Tu peux m'expliciter un peu ce que fait chaque ligne du code que tu as écrit s'il te plait? Je ne suis pas sûre de bien comprendre (oui, un peu boulette en matlab)

  16. #16
    Invité
    Invité(e)
    Par défaut
    Il n'y a pas de mal
    • Donc la première ligne M = randi(5,10,6)-1; ne te sert à rien, c'est juste pour l'exemple. Elle sert à générer une matrice 10x6 de nombres entre 0 et 4 inclus.
    • La 2ème ligne lettres = 'NATGC'; sert juste à avoir un vecteur contenant chacune de tes lettres N, A, T, G et C.
    • La troisième ligne lettres(1+M(:,1:5)) se complique
      Dans un premier temps je prélève les 5 premières colonnes de la matrice M M(:,1:5). Puis je lui ajoute 1 car les indices en MATLAB doivent être strictement positifs.
      Puis je fais passer cette matrice obtenue 1+M(:,1:5) comme les indices du vecteur lettres.

    Un autre petit exemple pour mieux comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lettres = 'NATGC';
    lettres(2)    % retourne A
    lettres([1 3 5]) % retourne N T C

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, ça marche, et j'ai à peu près compris!

    Je suis désolée, j'abuse, j'ai deux nouvelles questions:

    1) quand j'importe un fichier texte sous matlab (fopen/fscanf/fclose), est-il possible de n'importer le fichier qu'à partir de sa 2e ligne (je ne veux pas de la 1ère ligne)?

    2) (la plus importante) dans ma matrice (toujours la même que précédemment, composée de 0, 1, 2, 3 et 4), je ne veux pas tenir compte des lignes (5 colonnes) qui contiennent des zéros. Je veux n'exploiter que celles qui n'en contiennent pas. Je pensais créer une nouvelle matrice ne contenant que les valeurs que je veux, mais le problème est que je ne connais pas initialement la taille que fera cette nouvelle matrice une fois remplie.
    Y a-t-il un moyen de créer une matrice sans lui donner un nombre de lignes initialement?

    Encore une fois merci d'avance!

  18. #18
    Invité
    Invité(e)
    Par défaut
    Alors:
    1. Comment passer l'entête d'un fichier texte en lecture ?
    2. Un petit exemple utilisant la fonction ALL et l'indexage logique
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      M = [1 2 3 0 4
          1 2 2 3 4 
          4 2 3 1 2
          1 2 2 3 4
          1 2 0 1 1];
      M(all(M,2),:)
       
           1     2     2     3     4
           4     2     3     1     2
           1     2     2     3     4

  19. #19
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, c'est beaucoup plus léger que la solution que j'avais trouvée!

  20. #20
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Nouvelle question:

    Est-il possible de passer au logarithme les valeurs d'une seule colonne d'une matrice sans passer par une boucle for?
    J'ai essayé la commande

    logm(A(:,2)) avec A ma matrice, mais matlab n'est pas très content...

    Merci d'avance!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Convertir un mois en lettres vers un mois en chiffres
    Par merlinus3000 dans le forum Excel
    Réponses: 1
    Dernier message: 03/03/2014, 14h24
  2. Convertion char vers int
    Par barthelv dans le forum C
    Réponses: 8
    Dernier message: 08/10/2011, 21h45
  3. Réponses: 1
    Dernier message: 13/10/2007, 20h05
  4. Convertion Chaine vers decimal
    Par tchraad dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/11/2005, 16h43

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