1

假设我有两个相同数量的数据,每个都有其错误。特别是,我在 gnuplot 文件中有两个直方图,其格式大致 为直方图 B 的直方图xA yA dyAA xB yB dyB(xA 和 xB 值相同)

为了提高直方图的精度,我可以“合并它们”以更好地估计 y。在实践中,我想获得一个直方图,其中 y 值是 yA 和 yB 值的加权平均值,权重由它们的误差的倒数给出。

这是数据操作中的一个非常标准的操作,我期待有一些实用程序可以在 gnuplot 直方图上执行此操作。原来我没找到这个实用程序...

所以我想问一下是否有任何这样的程序已经这样做了。如果它不存在,我想请教一下用什么语言写这个。我已经在 Wolfram Mathematica 中做了一些事情,但我现在想在 Unix shell 中执行操作,所以我想知道 python 是否是操作 gnuplot 文件的好选择,或者有更适合的东西。

谢谢,罗伯托

更准确地说,我在 .gnu 文件中有直方图,有人以格式提供给我

   # comments 
     set title "sqrt(p^2(5)) distribution" font "Helvetica, 20" 
     set xlabel "sqrt(p^2(5))" font "Helvetica, 20" 
     set ylabel "d{/Symbol s}/dsqrt(p^2(5))" font "Helvetica, 20" 
     set xrange [    0.00000:  40.00000] 
     plot "-" with histeps 
        4.50000        3986.18        1.27863 
        5.50000        3986.18        1.27863 
        6.50000        3986.18        1.27863 
    e 

     set title "m(5) distribution" font "Helvetica, 20" 
     set xlabel "m(5)" font "Helvetica, 20" 
     set ylabel "d{/Symbol s}/dm(5)" font "Helvetica, 20" 
     set xrange [    0.00000:  40.00000] 
     plot "-" with histeps 
        4.50000        3986.18        1.27863 
        5.50000        3986.18        1.27863 
        6.50000        3986.18        1.27863 
     e 

我想从这个文件中提取所有数据来组合,例如,我在几个文件中的 m(5) 直方图(组合意味着做一个加权平均,如上所述)。在 Python 中读取这些数据并操作直方图以组合它们的任何快速方法?

4

2 回答 2

0

是的,Python 和 Numpy 是一个不错的选择。如果您的文件每行仅包含固定数量的数字,您可以使用numpy.loadtxt函数读取它们并使用savetxt写入它们。否则,您将不得不使用通用的 Python IO 例程。

于 2015-05-03T15:44:46.537 回答
0

最简单的方法是使用paste合并两个文件(假设两个文件中的 x 值相同且顺序相同),并在 gnuplot 中进行计算。

考虑两个测试文件A.txt

1 5 1
2 1 2

B.txt

1 3 1
2 4 1

使用脚本

set style fill solid noborder
set boxwidth 0.8 relative

set yrange [0:*]
weighted_avg(yA, dyA, yB, dyB) = ((yA/dyA + yB/dyB)/(1.0/dyA + 1.0/dyB))

plot '< paste A.txt B.txt' using 1:(weighted_avg($2, $3, $5, $6)) with boxes notitle

你得到以下直方图

在此处输入图像描述

于 2015-05-04T09:13:56.373 回答