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

에서 다운로드 할 수 있습니다, 당신은 get_coord()이 DTYPE float32(124,3) 배열을 반환하도록 찾을 수 있습니다. 마찬가지로 다음 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) 

목록에서 외부 루프 반복마다 coords에 124 개 항목을 추가하십시오. 두 번째 반복에서 볼 수있는 예외가 발생할 가능성이 큽니다.

+0

매번 배열을 초기화해야합니까? –

+0

나는 내 대답에 해당 줄을 넣어. 'for' 루프의 시작 부분에'coords = []'를 추가하십시오. – themiurge

+0

감사 ... 문제가 해결되었습니다 ... –