Gnuplot-如何计算不同块的平均值
我有一个包含不同块的文件,如下所示:Gnuplot-如何计算不同块的平均值,gnuplot,average,Gnuplot,Average,我有一个包含不同块的文件,如下所示: 1 2 6 7 9 3 4 5 ....... 3 6 2 9 4 7 2 7 9 5 3 7 ....... 8 3 5 1 如果我运行stat'File'会识别不同的块。现在,我想对所有块中的每个元素进行平均(即,在示例中,第一行和第一列的结果元素将是avg(1,4)=2.5) 在gnuplot中有什么方法可以做到这一点吗?您可以使用外部工具来计算块上所有单元格的平均值。但您也可以在gnuplot中完成。但是,您需要将数据保存在数据块中。如何到达那
1 2 6 7
9 3 4 5
.......
3 6 2 9
4 7 2 7
9 5 3 7
.......
8 3 5 1
如果我运行stat'File'
会识别不同的块。现在,我想对所有块中的每个元素进行平均(即,在示例中,第一行和第一列的结果元素将是avg(1,4)=2.5
)
在gnuplot中有什么方法可以做到这一点吗?您可以使用外部工具来计算块上所有单元格的平均值。但您也可以在gnuplot中完成。但是,您需要将数据保存在数据块中。如何到达那里,请参阅:。假设没有标题,每个子块的行数相等。检查以下示例作为起点 代码:
### calculate average over blocks for each cell in subblock
reset session
$Data <<EOD
111 112 113 114 115
121 122 123 124 125
131 132 133 134 135
141 142 143 144 145
211 212 213 214 215
221 222 223 224 225
231 232 233 234 235
241 242 243 244 245
311 312 313 314 315
321 322 323 324 325
331 332 333 334 335
341 342 343 344 345
EOD
stats $Data u 0 nooutput
BlockCount = STATS_blocks
ColCount = STATS_columns
RowCount = STATS_records/STATS_blocks
Cell(b,r,c) = real(word($Data[b*(RowCount+2) + r],c))
CellAvg(r,c) = (sum [_b=0:BlockCount-1] (Cell(_b,r,c)))/BlockCount
set print $Avg
do for [r=1:RowCount] {
Line = ''
do for [c=1:ColCount] {
Line = sprintf("%s %g",Line,CellAvg(r,c))
}
print Line
}
set print
set key noautotitle
set palette defined (0 "green", 1 "yellow")
plot $Avg matrix u 1:2:3 w image, \
'' matrix u 1:2:(sprintf("%g",$3)) w labels
### end of code
###计算子块中每个单元格的块平均值
重置会话
$Data是的,有
下面的代码用于计算块之间累积值的矩阵,并在到达最后一个块时返回平均值
$Data <<EOD
1 2 6 7
9 3 4 5
3 6 2 9
4 7 2 7
9 5 3 7
8 3 5 1
EOD
set xlabel "j"
set ylabel "i"
splot $Data matrix u 1:($2+0.1*column(-2)):3:-2 with impulses lc pal z lw 2 title ""
N=3
M=4
B=2
array A[N*M]
do for [k=1:|A|] { A[k]=0 }
mymean(j,i,v,b)=(A[i*M+j+1]=A[i*M+j+1]+v,(b==B-1)?A[i*M+j+1]/B:1/0)
replot $Data matrix u 1:($2+0.05):(mymean($1,$2,$3,column(-2))) w p pt 2 ps 3
$Data