Convertir la chaine d'ADN complémentaire en une matrice bina
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:
- Convertir la chaine d'ADN complémentaire en une matrice bina
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Chaine tnt gratuite sur mobile - Guide
- Convertir epub en kindle - Guide
- Convertir youtube en mp3 avec audacity - Guide
- Convertir kindle en epub - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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?
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