You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排除数组第一列,实现平均周期计算与负载关系图绘制?

绘制平均周期与负载关系图的修正方案

需求:绘制平均周期与负载的关系图,所用数组的第一列为负载数据,计算平均值时需排除该列。

原始数据

[[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:01:09