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 个项目。您看到的异常可能是在第二次迭代期间引发的。
好的。让我先解释一下。我在此代码中使用了一个名为 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 个项目。您看到的异常可能是在第二次迭代期间引发的。