Biopython数组添加错误(对所有人开放)

Biopython Array Addition Error (Open for all)

好的。让我先解释一下。我在此代码中使用了一个名为 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() return 是一个数据类型为 float32(124,3) 数组。同样,下一个 for 循环应该 return 相同。

它给出了一个奇怪的错误:

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"

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

我不确定我是否完全理解你在做什么,但看起来你需要在每次迭代开始时重置 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 个项目。您看到的异常可能是在第二次迭代期间引发的。