0

好的。让我先解释一下事情。我使用了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)带有 dtype 的数组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数组的。我只想在自身上添加数组坐标。我尝试对代码进行另一种修改:

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

它给出了同样的错误。你能帮我吗???

4

1 回答 1

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 个项目。您看到的异常可能是在第二次迭代期间引发的。

于 2017-05-23T08:22:33.783 回答