【问题标题】:Doing the average over a bunch of files对一堆文件进行平均
【发布时间】:2020-06-19 00:59:44
【问题描述】:

我有 1000 个文件,每个文件有 6 列 1000 分的信息。我想在 1000 个时间步中为每个点计算第 6 列的平均值。我的意思是对于每个点,我希望平均有 1000 个时间步,然后保存在一个文本文件中。我写的代码在理解过程中存在问题。它可以计算每个点的平均值,但最后它给了我一个数字。

import os
import numpy as np

l = [f for f in sorted(os.listdir('.')) if f.startswith('config')]


maxnum = np.max([int(os.path.splitext(f)[0].split('_')[1]) for f in l])
l = ['configuration_%d.out' % i for i in range(maxnum)]


for i, d in enumerate(l): 
    a = np.loadtxt(d).T 
    num = os.path.splitext(d)[0]
    #j = np.zeros(1001)

    x = np.mean(a[5])

    #y = np.mean(a[4])

    np.savetxt("foo.txt",x)

如果您能帮我一个忙,我将不胜感激。谢谢大家

【问题讨论】:

  • 我假设你说的每个点都相当于每个文件。如果是 csv 文件,我会首先使用 pandas。
  • 每个文件有 1000 个点,每个点有 6 列。我在这里附上了其中一个link。我有这个文件的 1000 个数字,我想获得第 6 列的每个点的平均值。
  • 您希望索引 = 5 的列包含 6 列的平均值,对吗? 0.00166785 是 '0.85809016 -1.88551593 0.00000000 -0.62240386 0.00077418 0.00166785' 的平均值 - 这是您的第一行数据。

标签: python numpy average mean


【解决方案1】:

回答您的问题,您每次都在覆盖 foo.txt,因此您只能看到一个数字。

在循环之前打开一个txt文件,然后添加信息:

txt_file = open('foo.txt', 'w')
for i, d in enumerate(l):
     txt_file.write(f'{x}\n')
txt_file.close()

两件事:

  1. f"" 它是一个 f 字符串,可从 python3.6 使用。如果您使用的是旧版本,只需根据需要格式化字符串。
  2. \n 表示换行,所以你把每个数字写在下一行。

【讨论】:

  • 谢谢,我做到了,但我收到关于 NumPy 数组的错误。 f=open('f1.txt','w') 然后是 np.savetxt(f, x) 然后是 f.write(f'{x}\n') 最后是 f.close()。但我得到了 预期的 1D 或 2D 数组,而得到了 0D 数组
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 2016-03-16
  • 1970-01-01
  • 2015-10-31
  • 2015-12-23
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多