Convertir la chaine d'ADN complémentaire en une matrice bina

Fermé
Soma1316 Messages postés 17 Date d'inscription vendredi 3 mars 2023 Statut Membre Dernière intervention 25 mai 2023 - Modifié le 15 mars 2023 à 18:06
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 15 mars 2023 à 18:15

Bounjour,

S'il vous plaît comment résoudre cette probleme

Code:

binary_complement = np.zeros((img.height, img.width), dtype=int))
for i in range(img.height):
    for j in range(img.width):
        indexs = i * img.width + j 
        nucleotide = adn[indexs]
        if nucleotide == 'A':
            binary_complement[i, j] = '00'
        elif nucleotide == 'T':
            binary_complement[i, j] = '11'
        elif nucleotide == 'C':
            binary_complement[i, j] = '01'
        else:
            binary_complement[i, j] = '00'
print(binary_complement)

erreur:

IndexError: string index out of range 

Modération : merci de partager le code comme expliqué ici
 

A voir également:

2 réponses

yg_be Messages postés 23473 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 février 2025 Ambassadeur 1 568
13 mars 2023 à 18:55

bonjour,

si j'étais toi, j'examinerais la longueur de la chaine, comparée au produit des dimensions de l'image.

peux-tu partager du texte plutôt qu'une image?

0
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 7 828
15 mars 2023 à 18:15

Bonjour

Merci de partager le code comme expliqué ici

Il y a plusieurs choses qui ne vont pas :

  • L'erreur en elle-même a lieu ligne 5 : rien ne garantir que la chaîne adn est suffisamment longue pour que le caractère à l'index i * img.width + j existe. Dit autrement, le code actuel ne peut marcher que si :
    len(adn) >= img.width * img.height

    ce qui est faux en général. En l'occurrence, len(adn) est vraisemblablement trop courtes par rapport à la taille de l'image. Il faudrait donc décider de ce qu'il faut faire concernant les pixels restants. La manière la plus simple est de les laisser tels quels en interrompant la boucle:
     

    binary_complement = np.zeros((img.height, img.width), dtype=int))
    for i in range(img.height):
        for j in range(img.width):
            indexs = i * img.width + j
            if indexs >= len(adn):
                print("Chaîne ADN trop courte")
                break
            ...
  • La manière dont est initialisé la matrice n'est pas top. Il vaudrait mieux choisir un type numpy (par exemple np.uint32 soit 4 octets par case)
  • Tu stockes dans la case (i, j) un trois caractères par exemple '1' '0' et '\0' soit trois octets. Mais ça n'est pas une valeur binaire que tu stockes (qui elle tiendrait en 2 bits soit moins d'un octet). Or les fonctions traditionnellement utilisées pour rendre une image sous forme de numpy.array en nuance de gris s'attendent à avoir une matrice pour laquelle chaque entier est une valeur stockée sur un octet. Il vaudrait donc mieux remplacer ces chaînes par leur valeur numérique (0 au lieu de "00" ; 1 au lieu de "01", 2 au lieu de "10", 3 au lieu de "11", etc)

Bonne chance

0