平均N个文件

时间:2018-01-26 13:46:15

标签: python numpy io

我有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分隔。

1 个答案:

答案 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}}