在使用 Numpy savetxt 保存之前,向表添加两行注释



这是Python 3代码给我的问题:

name_in_stk = name+'.out.abs.stk'
data_stk = np.loadtxt(name_in_stk, skiprows=0)
wavelength = []
ext_coef = []
ext_coeff = [row[1] for row in data_stk ]
wavelength = 1e7/np.array([row[0] for row in data_stk ])
DataOut = []
DataOut = np.column_stack((wavelength,ext_coeff))
np.savetxt(name+'.stk',DataOut, fmt=('%5.1f','%5.4e'))

输出为:

435.6 1.8225e+04
396.7 3.2189e+04
333.8 3.7765e+03
325.2 4.6922e+04
315.5 1.0923e+05
307.0 9.9065e+02
296.4 1.3264e+03
288.2 5.6207e+04
282.8 3.4048e+04
266.1 2.5265e+04

尽管我已经搜索过,但我无法回答的问题是:

如何在保存之前向此表添加两行标题?

>np.savetxt可以选择指定标题,不是(如我预期的那样(通过指定与您要保存的列相对应的列名列表,而是通过指定要放置的字符串作为文件的开头,该字符串将被注释掉#。没有创建两个标头的选项,但由于savetxt想要一个字符串作为标题,这使得事情变得更容易,因为您可以使用n将标头字符串拆分为两行。

一个最小的例子:

import numpy as np
data = np.random.random(10).reshape(5,2)*100
header = '{0:^5s} {1:^7s}n{2:^5s} {3:^7s}'.format('a', 'b', 'c', 'd')
np.savetxt('test', data, fmt=('%5.1f','%5.4e'), header=header)

产生这个:

#  a      b   
#  c      d   
39.0 7.4369e+01
87.2 8.7414e+01
50.0 7.7876e+01
23.9 8.2554e+01
87.7 8.9955e+01

作为旁注:您可以加载带有np.loadtxt的单个列,例如ext_coeff = data_stk[:,1],并与此一致,可以用wavelength = 1e7/data_stk[:,0]计算wavelength。如果您正在处理大型数据集,那么当您摆脱手动循环(.. for row in ..(时,这可能会加快速度。对于有一百万行的文件,我得到的加速比约为 60 倍。

最新更新