0

OK. Laissez-moi vous expliquer les choses en premier. J'ai utilisé un module spécifique nommé Biopython dans ce code. J'explique les détails nécessaires pour résoudre le problème si vous n'êtes pas habitué au module.Erreur d'ajout de tableau Biopython (ouverte à tous)

Le code est:

#!/usr/bin/python 

from Bio.PDB.PDBParser import PDBParser 

import numpy as np 

parser=PDBParser(PERMISSIVE=1) 

structure_id="mode_7" 
filename="mode_7.pdb" 
structure=parser.get_structure(structure_id, filename) 
model1=structure[0] 
s=(124,3) 
newc=np.zeros(s,dtype=np.float32) 
coord=[] 
#for chain1 in model1.get_list(): 
# for residue1 in chain1.get_list(): 
#  ca1=residue1["CA"] 
#  coord1=ca1.get_coord() 
#  newc.append(coord1) 
for i in range(0,29): 
    model=structure[i] 
    for chain in model.get_list(): 
     for residue in chain.get_list(): 
      ca=residue["CA"] 
      coord.append(ca.get_coord()) 
    newc=np.add(newc,coord) 

print newc 

print "END" 

fichier PDB est le fichier de la banque de données de protéines. Le fichier que je travaille avec peut être téléchargé à partir https://drive.google.com/open?id=0B8oUhqYoEX6YVFJBTGlNZGNBdlk

Si vous supprimez les hash de la première boucle, vous verrez que get_coord() retourne un tableau (124,3) avec DTYPE float32. De même, la prochaine boucle est censée retourner la même chose.

Il donne une étrange erreur:

Traceback (most recent call last): 
    File "./average.py", line 27, in <module> 
    newc=np.add(newc,coord) 
ValueError: operands could not be broadcast together with shapes (124,3) (248,3) 

Je suis absolument aucune idée comment il parvient à faire un tableau 248,3. Je veux juste ajouter le tableau coord sur lui-même. J'ai essayé avec une autre modification du code:

#!/usr/bin/python 

from Bio.PDB.PDBParser import PDBParser 

import numpy as np 

parser=PDBParser(PERMISSIVE=1) 

structure_id="mode_7" 
filename="mode_7.pdb" 
structure=parser.get_structure(structure_id, filename) 
model1=structure[0] 
s=(124,3) 
newc=np.zeros(s,dtype=np.float32) 
coord=[] 
newc2=[] 
#for chain1 in model1.get_list(): 
# for residue1 in chain1.get_list(): 
#  ca1=residue1["CA"] 
#  coord1=ca1.get_coord() 
#  newc.append(coord1) 
for i in range(0,29): 
    model=structure[i] 
    for chain in model.get_list(): 
     for residue in chain.get_list(): 
      ca=residue["CA"] 
      coord.append(ca.get_coord()) 
    newc2=np.add(newc,coord) 

print newc 

print "END" 

Il donne la même erreur. Pouvez-vous aider ???

Répondre

0

Je ne suis pas sûr que je comprends parfaitement ce que vous faites, mais il semble que vous devez réinitialiser la liste coords au début de chaque itération:

for i in range(0,29): 
    coords = [] 
    model=structure[i] 
    for chain in model.get_list(): 
     for residue in chain.get_list(): 
      ca=residue["CA"] 
      coord.append(ca.get_coord()) 
    newc=np.add(newc,coord) 

Si vous gardez annexant sans effacer la liste vous ajoutez 124 articles à coords à chaque itération de la boucle externe. L'exception que vous voyez est probablement déclenchée lors de la deuxième itération.

+0

dois-je initialiser le tableau à chaque fois alors? –

+0

J'ai mis la ligne pertinente dans ma réponse. 'coords = []' au début de la boucle 'for'. – themiurge

+0

Merci ... Le problème est résolu ... –