首页 > 解决方案 > 计算不同文件的平均单元格值

问题描述

从大约 50000 个具有大约 100 万个值(所有数字)的非结构化文本文件中,我需要计算每个单元格的平均值,即所有 50.000 个文件的平均值。

文件的结构例如

4.7  3.9  5.9  6.2  6.6   6.6   6.5  4.7  5.5  11.2 
21.9 12.4  5.6  4.5  5.8  6.7  5.4 3.6 3.9 0.7 0.8

对于每个单元格位置,我需要所有文件的平均值。

例如,我需要文本文件中所有第一个元素的平均值,包括所有 50.000 个文本文件(但不仅是第一个元素,而且是所有元素)。

任何想法如何在 R 或 Python 中做到这一点?

编辑:附加示例(非常非常简化) 在此处输入图像描述

我想根据文件 1、文件 2 和文件 3 中的单元格值计算新文件 (MEAN) 中的平均值,如下面的链接所示。但是,它应该是一个自动脚本,因为它不是 3,而是 50.000 个文件每个文件中有许多 10 万个值。

标签: pythonrfile

解决方案


在 python 中,我会建议一个简单的方法,希望我得到你。
您可以获取所有文件,然后对其进行迭代,以便将所有空格分隔的数字放入列表中。所有这些列表将存储在另一个列表中以转换为矩阵,使用 numpy 易于管理。
这里我给你举个例子。

  • 0. 将所有文件放在同一个目录下,例如 fdir
  • 1.获取所有文件名

    import os
    flist = os.listdir(fdir)
    

  • 2. 现在遍历文件列表。假设文件中的格式化位置并不重要,而只是序数序列(即第一,第二,......不是左上角,右上角,......)。

    import numpy as np
    numbers = [] #list of files numbers lists
    for text in flist:
    with open(filename,'r') as f:
           ftext = f.read().split() #the file has only space-separated numbers 
           ftext = [float(n) for n in ftext]
           numbers.append(  np.array( ftext ) )
    

  • 4. 转换矩阵中的列表列表

    numbers = np.vstack(numbers)
    

  • 5.做你的操作..
    示例
    对每个文件的第一个单元格求和,意味着对后一个矩阵的第一列求和,所以:

    sum_over_first_cells = np.sum( numbers[:,0] )
    

  • 希望它会有所帮助。


    推荐阅读