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ファイルタンパク質データバンクファイルです。私が働いているファイルには、ループの最初からハッシュを削除した場合、あなたはget_coord()はDTYPE float32(124,3)配列を返すことがわかりますhttps://drive.google.com/open?id=0B8oUhqYoEX6YVFJBTGlNZGNBdlk

からダウンロードすることができます。同様に、次の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に追加します。表示される例外は、2回目の反復中に発生する可能性があります。

+0

私は毎回配列を初期化すべきですか? –

+0

私は答えに関連する行を入れました。 'for'ループの始めに' coords = [] 'を追加します。 – themiurge

+0

ありがとうございます...問題は解決されました... –

関連する問題