Skip to main content
 首页 » 编程设计

python之多次运行计算数学函数 (Numpy)

2025年05月04日13jillzhang

我目前正在运行一系列实验,我需要运行多次才能生成不错的误差线。 每个实验输出一个文件,其中包含各种信息,例如平均值/标准差/吞吐量/延迟/第 n 个百分位数等。

然后我绘制这些值中的每一个,但为了获得更合理的结果,我需要为每个单元格取所有这些文件的平均值,并将其与获得的标准偏差一起绘制为误差条。

但是我目前的代码不起作用:

 data_1 = np.loadtxt(fold + "/" +  "clients_1.txt") 
 data_2 = np.loadtxt(fold + "/" +  "clients_2.txt") 
 data_3 = np.loadtxt(fold + "/" +  "clients_3.txt") 
 data = [data_1,data_2,data_3] 
 d_avg = sum(data) / float(len(data)) 
 err   = np.std(d_avg) 
 plt.plot(d_avg[:,19],d_avg[:,7], label='Test Plot', yerr = err[:,7] ) 

我得到的错误是这样的:

IndexError: 0-d arrays can only use a single () or a list of newaxes (and a single ...) as an index 

对于问题是什么有点困惑。 d_agv 文件打印正常。

所有客户端文件都有相同的列行数,一个文件中的每个单元格对应另一个文件中的相同单元格(显然可能具有不同的值)

每个文件中每一行的格式是:

1 1 50 1 1 0 100 11.30000 9.00000 50.00000 32.09000 5.66480 9.00000 9.00000 10.00000 11.00000 12.00000 13.55000 32.85000 39.47368  

并且有多个这样的行。

请您参考如下方法:

好的,如果我理解你的意思,你想要整个实验运行的均值和标准差。例如,如果我们使用表中给出的一些随机数据运行 2 次,则平均值为:

run 1   run 2       mean 
 
1 2 3   1 3 2    1  2.5 2.5 
4 5 6   5 4 6   4.5 4.5  6 
7 8 9   7 8 9    7   8   9 

如果我的假设是正确的,这就是你想要的代码:

data_1 = np.loadtxt(fold + "/" +  "clients_1.txt") 
data_2 = np.loadtxt(fold + "/" +  "clients_2.txt") 
data_3 = np.loadtxt(fold + "/" +  "clients_3.txt") 
 
data = np.array([data_1, data_2, data_3]) 
data_avg = data.mean(axis=0) 
data_err = data.std(axis=0) 
plt.plot(data_avg[:,19], data_avg[:,7], label='Test Plot')