Python 向numpy数组添加具有特定元素的新行的更好方法

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

我有一段代码生成一个包含分子x,y,z坐标的文件。为了使它成为一个所谓的“xyz文件”(file.xyz),我需要在这个坐标文件中添加两行:1)顶行只包含一个数字,即原子数;和2)一个可以留空的评论行(或者说“评论”之类的)。我的变量
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)