python - 使用 awk 从多个文件计算文件中的平均值

标签 python bash matrix average

我有 100 个文件,名称分别为 file.1.netcc、file.2.netcc ... file.100.netcc。每个文件包含以下内容:

# 4 # Number of network ROIs 
# 2 # Number of netcc matrices 
# WITH_ROI_LABELS 
LFovea_LO LLO LMT RV3A 
1 2 3 4 
# CC 
1.0000  0.2271  -0.1172 -0.2258 
0.2271  1.0000  0.3991  0.1092 
-0.1172 0.3991  1.0000  0.3055 
-0.2258 0.1092  0.3055  1.0000 
# FZ 
4.0000  0.2312  -0.1177 -0.2297 
0.2312  4.0000  0.4226  0.1096 
-0.1177 0.4226  4.0000  0.3156 
-0.2297 0.1096  0.3156  4.0000 

现在,我想要发生的事情是对所有“cc”值进行平均。每个值都是所有文件的平均值。例如,我们取第一行第一列的第一个值(1.0000),对所有文件进行平均并输出平均值...依此类推,直到最后一位数字,即第 4 列第 4 行值(1.0000) 对所有文件取平均值。
所以我想要返回的是一个 4x4 的表,其中包含所有文件的平均值。 我还希望对其下面的“FZ”类别进行此操作。我怎样才能做到这一点?

我尝试使用这个命令:

awk '{a[FNR]+="  "$1"  "$2"  "$3"   "$4"  "$5"  "$6"   "$7"   "$8;b[FNR]++;}END{for(i=1;i<=FNR;i++)print i,a[i]/b[i];}' /Users/3dnetcorr/file*.netcc > outputs_averaged.file

但是这个命令所做的(我认为)是对整个列进行平均,为每列提供一个值..这不是我想要它做的。

我想我要问的是如何平均包含矩阵的文件? 我怎样才能用Python编码来做到这一点?也许是numpy?

最佳答案

awk 来救援!

awk 'FNR==1 {fc++; cc_f==fz_f=0; cc_c=fz_c=0}
    /^# CC/ {cc_f=1; fz_f=0; next}
    /^# FZ/ {cc_f=0; fz_f=1; next}
    cc_f    {cc_c++; for(i=1;i<=NF;i++) cc[cc_c,i]+=$i}
    fz_f    {fz_c++; for(i=1;i<=NF;i++) fz[fz_c,i]+=$i}
    END {print "CC averages"
         for(i=1;i<=cc_c;i++)
           for(j=1;j<=NF;j++) printf "%.4f%s", cc[i,j]/fc, (j==NF?ORS:OFS)
         print "FZ averages"
         for(i=1;i<=fz_c;i++)
           for(j=1;j<=NF;j++) printf "%.4f%s", fz[i,j]/fc, (j==NF?ORS:OFS)}' file{1..100}

这不会验证文件格式,因此文件之间应该保持一致。 它不假设方阵。一些命名约定 _f 用于标记/指示器 _c 用于计数器。 fc 是文件计数器。您可以组合标志和计数器,但会更难以解释。

关于python - 使用 awk 从多个文件计算文件中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036579/

相关文章:

bash - 从目录和子目录中删除所有具有某些扩展名的文件

image - 如何获取网站中所有图片的所有信息

python - GIL 正在杀死 I/O 绑定(bind)线程

python - 396:错误:(-5)尚未计算此 LBPH 模型。你调用了train方法吗?在函数 cv::face::LBPH::predict 中

python - 使用默认参数清洁 Pythonic 组合

python - 在特定条件下计算日期之间

bash 用户输入如果

matlab - 获取矩阵中行的平均值减去 a 值并将其放入另一个矩阵

css - IE 8/9 的转换矩阵问题

arrays - 如何使用 Swift 从矩阵中获取子矩阵