gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:43 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com