我有N个文件,每个文件看起来像:
#p q s val1 val2
0.5 0.2 0.3 1.2 0.8
0.1 0.9 0.1 1.8 0.8
0.2 0.3 0.2 0.5 0.3
... ... ... ... ...
我需要对文件中的每个对应值进行平均,以便创建一个“MeanFile.txt”,它将包含文件中元素的均值。
在我的课程中,我通常会这样做:
import pylab
import glob
import numpy
list_of_files=glob.glob('*.txt')
N = number_of_files
R = number_of_rows_in_each_file
p = numpy.zeros(N,R)
q = numpy.zeros(N,R)
s = numpy.zeros(N,R)
val1 = numpy.zeros(N,R)
val2 = numpy.zeros(N,R)
for (i,filename) in zip(range(0,N),list_of_files):
p[i],q[i],s[i],val1[i],val2[i] = pylab.loadtxt(filename, unpack = True)
然后
out_file = open("Results.dat","w")
out_file.write("#\n")
for j in range(0,R):
out_file.write("%.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f \n" %(p.mean(0)[j],q.mean(0)[j],s.mean(0)[j], val1.mean(0)[j],val2.mean(0)[j]))
我确信必须有一种更简单的方法,因为如果我得到一组具有不同数量变量的新数据,例如:
#p q s val1 val2 theta
0.5 0.2 0.3 1.2 0.8 1
0.1 0.9 0.1 1.8 0.8 1
0.2 0.3 0.2 0.5 0.3 2
... ... ... ... ... ...
我还需要引入新变量并重复这些步骤。是否有一种更简单的N个文件平均方法?例如,使用numpy.loadtxt来获取唯一列表中的数据?默认情况下,我的数据由4个spacec分隔。
答案 0 :(得分:1)
import glob
import numpy as np
for count, file in enumerate(glob.glob('*.txt'), 1):
if count == 1:
summed = np.loadtxt(file)
else:
summed += np.loadtxt(file)
mean = summed / count
np.savetxt('out.txt', mean, fmt='%.3f', delimiter=' ')
将按空格自动分隔,因此这应该可以正常工作
0.500 0.200 0.300 1.200 0.800 1.000
0.100 0.900 0.100 1.800 0.800 1.000
0.200 0.300 0.200 0.500 0.300 2.000
输出文件示例
{{1}}