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