0

好的。讓我先解釋一下事情。我在這段代碼中使用了一個名爲Biopython的特定模塊。如果您不習慣使用模塊,我正在解釋解決問題的必要細節。Biopython陣列添加錯誤(對所有人開放)

的代碼是:

#!/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" 

PDB文件是蛋白質數據銀行的文件。我正在使用的文件可以從https://drive.google.com/open?id=0B8oUhqYoEX6YVFJBTGlNZGNBdlk

如果您從第一個for循環的哈希值進行下載,你會發現,get_coord()返回(124,3)陣列D型float32。同樣,下一個for循環應該返回相同的值。

它給出了一個奇怪的錯誤:

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) 

我絕對無能如何設法使248,3陣列。我只是想將數組coord添加到它自己。我試着用另一種修改代碼:

#!/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" 

它給出了同樣的錯誤。你能幫我嗎???

回答

0

我不知道我完全理解你在做什麼,但它看起來像你需要在每次迭代開始重置coords列表:

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) 

如果繼續使用,無需清除追加列表在外部循環的每次迭代中將124項添加到coords。您看到的異常可能會在第二次迭代中提出。

+0

我應該每次都初始化數組嗎? –

+0

我把相關的一行放在我的答案中。 'for'循環開始處的coords = []'。 – themiurge

+0

謝謝...問題解決了... –