2017-10-31 6 views
-1

分子のx、y、z座標を含むファイルを生成するコードがあります。これをいわゆる "xyzファイル"(file.xyz)にするために、私はこの座標ファイルに2つの行を追加する必要があります。1)上の行に原子の数が1つだけ含まれています。 2)空白のままにすることができるコメント行(または「コメント」など)。 xyzと呼ばれる私の変数は、このnumpy配列に特定の要素を含む新しい行を追加する方が良い

print(xyz) 

のように見えるの原子の数がlen(xyz)で与えられる

[['C\t' '-3.171284' '-0.739715' '0.525945'] 
['N\t' '-1.936557' '-0.026021' '0.202474'] 
['C\t' '-3.318626' '-1.011529' '2.043242'] 
['H\t' '-3.141982' '-1.708867' '0.014441'] 
['C\t' '-0.741793' '-0.677286' '0.129631'] 
['C\t' '0.462397' '0.162645' '-0.307099'] 
['N\t' '1.631324' '-0.381016' '0.368999'] 
['C\t' '0.559996' '0.147611' '-1.856616'] 
['H\t' '0.300250' '1.202007' '0.017165'] 
['H\t' '2.526359' '-0.068732' '0.017635'] 
['H\t' '1.567511' '-1.380033' '0.529925'] 
['O\t' '-0.635852' '-1.906598' '0.361505'] 
['H\t' '-2.000386' '0.966116' '0.025368'] 
['C\t' '-4.387139' '0.003940' '0.016667'] 
['O\t' '-4.106128' '1.302132' '-0.374180'] 
['O\t' '-5.528310' '-0.455442' '-0.014098'] 
['H\t' '-4.923659' '1.755530' '-0.673289'] 
['H\t' '0.662313' '-0.882934' '-2.213554'] 
['H\t' '1.440364' '0.716422' '-2.178038'] 
['H\t' '-0.324051' '0.596253' '-2.326387'] 
['H\t' '-2.470166' '-1.616700' '2.369974'] 
['H\t' '-4.246949' '-1.555151' '2.240849'] 
['H\t' '-3.326402' '-0.071610' '2.604601']] 

を与えます。

nbofatoms = len(xyz) 
xyz = np.insert(xyz, 0, '', axis=0) 
xyz = np.insert(xyz, 0, '', axis=0) 
xyz[0][0] = nbofatoms 
xyz[1][0] = 'Comment' 

だから、もっと良い方法があります:私の望ましい出力は(ビット不器用な感じ)

print(xyz) 

[[23 '' '' ''] 
['Comment' '' '' ''] 
['C\t' '-3.171284' '-0.739715' '0.525945'] 
['N\t' '-1.936557' '-0.026021' '0.202474'] 
['C\t' '-3.318626' '-1.011529' '2.043242'] 
['H\t' '-3.141982' '-1.708867' '0.014441'] 
['C\t' '-0.741793' '-0.677286' '0.129631'] 
['C\t' '0.462397' '0.162645' '-0.307099'] 
['N\t' '1.631324' '-0.381016' '0.368999'] 
['C\t' '0.559996' '0.147611' '-1.856616'] 
['H\t' '0.300250' '1.202007' '0.017165'] 
['H\t' '2.526359' '-0.068732' '0.017635'] 
['H\t' '1.567511' '-1.380033' '0.529925'] 
['O\t' '-0.635852' '-1.906598' '0.361505'] 
['H\t' '-2.000386' '0.966116' '0.025368'] 
['C\t' '-4.387139' '0.003940' '0.016667'] 
['O\t' '-4.106128' '1.302132' '-0.374180'] 
['O\t' '-5.528310' '-0.455442' '-0.014098'] 
['H\t' '-4.923659' '1.755530' '-0.673289'] 
['H\t' '0.662313' '-0.882934' '-2.213554'] 
['H\t' '1.440364' '0.716422' '-2.178038'] 
['H\t' '-0.324051' '0.596253' '-2.326387'] 
['H\t' '-2.470166' '-1.616700' '2.369974'] 
['H\t' '-4.246949' '-1.555151' '2.240849'] 
['H\t' '-3.326402' '-0.071610' '2.604601']] 

私のソリューションすべきですか?

答えて

-1

あなたはあなたのコードを凝縮するためにインラインでそれを行うことができます:

xyz = np.insert(xyz, 0, str(nbofatoms), axis=0) 
xyz = np.insert(xyz, 0, 'comment', axis=0) 
+0

まず、ご注文は、コメント行であることの原子の数につながる、とコメント行は最初の行です。私が望むものではありません。さらに、これにより、2行目の4つの要素すべてに数字「23」が追加され、最初の行の4つの要素すべてに文字列「comment」が追加されます。これらの行の最初の要素に "23"と "Comment"を追加したいだけです。 – Yoda

関連する問題