Python 向numpy数组添加具有特定元素的新行的更好方法
我有一段代码生成一个包含分子x,y,z坐标的文件。为了使它成为一个所谓的“xyz文件”(file.xyz),我需要在这个坐标文件中添加两行:1)顶行只包含一个数字,即原子数;和2)一个可以留空的评论行(或者说“评论”之类的)。我的变量Python 向numpy数组添加具有特定元素的新行的更好方法,python,numpy,Python,Numpy,我有一段代码生成一个包含分子x,y,z坐标的文件。为了使它成为一个所谓的“xyz文件”(file.xyz),我需要在这个坐标文件中添加两行:1)顶行只包含一个数字,即原子数;和2)一个可以留空的评论行(或者说“评论”之类的)。我的变量xyz如下所示 print(xyz) 给予 原子数由len(xyz)给出。我想要的产出应该是 print(xyz) [[23 '' '' ''] ['Comment' '' '' ''] ['C\t' '-3.171284' '-0.739715' '0.5
xyz
如下所示
print(xyz)
给予
原子数由len(xyz)给出。我想要的产出应该是
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']]
我的解决方案(感觉有点笨拙):
那么,有更好的方法吗?您可以通过内联方式压缩代码:
xyz = np.insert(xyz, 0, str(nbofatoms), axis=0)
xyz = np.insert(xyz, 0, 'comment', axis=0)
首先,您的顺序导致注释行中原子的数量,注释行是第一行。不是我想要的。此外,这会将数字“23”添加到第二行的所有四个元素中,并将字符串“comment”添加到第一行的所有四个元素中。我只想在这些行的第一个元素中添加“23”和“Comment”。
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'
xyz = np.insert(xyz, 0, str(nbofatoms), axis=0)
xyz = np.insert(xyz, 0, 'comment', axis=0)