如何排除数组第一列,实现平均周期计算与负载关系图绘制?
绘制平均周期与负载关系图的修正方案
需求:绘制平均周期与负载的关系图,所用数组的第一列为负载数据,计算平均值时需排除该列。
原始数据
[[0.2 0.96 0.94 0.91 0.69 nan nan nan nan nan nan] [0.3 1.15 1.09 1.19 1.19 1.31 0.97 0.97 nan nan nan] [0.4 1.29 1.28 1.31 1.21 nan nan nan nan nan nan] [0.5 1.54 1.43 1.45 1.37 1.35 1.29 nan nan nan nan] [0.75 1.68 1.53 1.68 1.75 1.8 1.78 nan nan nan nan] [1. 1.93 2.04 1.91 1.94 nan nan nan nan nan nan]]
现有代码及问题
你当前的代码会把第一列的负载值纳入均值计算,导致结果不符合需求:
# 定义清理数组的函数 def clean_array(data): """移除数组中的NaN值并返回缩短后的数组""" return data[np.logical_not(np.isnan(data))] # 计算第一行的均值和标准差 clean_array(data[0]).mean(), clean_array(data[0]).std(ddof=1)
当前输出:
(0.74, 0.32070235421649157)
这个结果包含了第一列的0.2,并非仅周期数据的均值。
修正方案
先排除第一列的负载数据,再清理NaN并计算统计值,最后完成绘图:
完整代码
import numpy as np import matplotlib.pyplot as plt # 定义函数:处理单一行,返回周期数据的均值和样本标准差 def get_cycle_stats(row): # 提取第一列之后的周期数据 cycle_values = row[1:] # 过滤NaN值 cleaned_cycles = cycle_values[~np.isnan(cycle_values)] # 计算均值和标准差(ddof=1表示样本标准差) return cleaned_cycles.mean(), cleaned_cycles.std(ddof=1) # 提取所有负载值 load_values = data[:, 0] # 遍历每一行计算统计量 mean_cycle_list = [] std_cycle_list = [] for row in data: mean, std = get_cycle_stats(row) mean_cycle_list.append(mean) std_cycle_list.append(std) # 绘制带误差棒的关系图 plt.figure(figsize=(8, 6)) plt.errorbar(load_values, mean_cycle_list, yerr=std_cycle_list, fmt='o-', color='#1f77b4', capsize=6) plt.xlabel('负载') plt.ylabel('平均周期') plt.title('平均周期随负载变化关系') plt.grid(axis='y', linestyle='--', alpha=0.7) plt.show()
验证结果
以第一行为例,修正后计算的均值为(0.96+0.94+0.91+0.69)/4 = 0.875,标准差约为0.128,符合仅周期数据统计的需求。
内容的提问来源于stack exchange,提问作者Erin O'Halloran
相关产品推荐
相关产品推荐

