首页 > 试题广场 >

统计监控数据

[编程题]统计监控数据
  • 热度指数:82 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

你拿到了一台存储集群导出的“监控快照”原始行。该行把若干个样本首尾相接在一起,每个样本严格包含19个浮点特征(按固定顺序)。请把整行解析为若干样本,然后对每一列特征分别计算以下统计量,并按指定顺序输出:

  • 对每列特征依次输出:mean max min ptp std var skew kurt
  • 说明
    • mean: 该列的算术平均
    • max/min: 该列最大/最小
    • ptp: 极差=max−min
    • std/var: 使用总体标准差/总体方差(分母用样本数 n)
    • skew: 总体偏度=平均[((x−mean)/std)^3]。若该列 std=0,则定义 skew=0
    • kurt: 总体超峰度=平均[((x−mean)/std)^4]−3。若该列 std=0,则定义 kurt=0

输入描述:
  • 输入保证总浮点数个数是19的整数倍



输出描述:
  • 先输出特征0的8个统计量,再输出特征1的8个统计量,……直到特征18
  • 结果用空格分隔;所有数保留两位小数
示例1

输入

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

输出

1.00 2.00 0.00 2.00 0.82 0.67 0.00 -1.50 2.00 3.00 1.00 2.00 0.82 0.67 0.00 -1.50 3.00 4.00 2.00 2.00 0.82 0.67 0.00 -1.50 4.00 5.00 3.00 2.00 0.82 0.67 0.00 -1.50 5.00 6.00 4.00 2.00 0.82 0.67 0.00 -1.50 6.00 7.00 5.00 2.00 0.82 0.67 0.00 -1.50 7.00 8.00 6.00 2.00 0.82 0.67 0.00 -1.50 8.00 9.00 7.00 2.00 0.82 0.67 0.00 -1.50 9.00 10.00 8.00 2.00 0.82 0.67 0.00 -1.50 10.00 11.00 9.00 2.00 0.82 0.67 0.00 -1.50 11.00 12.00 10.00 2.00 0.82 0.67 0.00 -1.50 12.00 13.00 11.00 2.00 0.82 0.67 0.00 -1.50 13.00 14.00 12.00 2.00 0.82 0.67 0.00 -1.50 14.00 15.00 13.00 2.00 0.82 0.67 0.00 -1.50 15.00 16.00 14.00 2.00 0.82 0.67 0.00 -1.50 16.00 17.00 15.00 2.00 0.82 0.67 0.00 -1.50 17.00 18.00 16.00 2.00 0.82 0.67 0.00 -1.50 18.00 19.00 17.00 2.00 0.82 0.67 0.00 -1.50 19.00 20.00 18.00 2.00 0.82 0.67 0.00 -1.50

说明

共有3个样本,每列是长度为3的等差序列,因此每列 mean 为中间值,ptp=2,std=√(2/3)≈0.82,var=2/3≈0.67,skew=0,kurt=−1.50。
import statistics as st

data = list(map(float, input().split()))

n = int(len(data) / 19)

res = ''
for ii in range(19):
    l = []
    for jj in range(n):
        l.append(data[jj * 19 + ii])
    mean = st.mean(l)
    mx = max(l)
    mn = min(l)
    ptp = mx - mn
    std = st.pstdev(l)
    var = st.pvariance(l)
    skew = 0.0
    kurt = 0.0
    if std != 0:
        for x in l:
            skew += ((x - mean) / std) ** 3
            kurt += ((x - mean) / std) ** 4
    skew /= n
    kurt /= n
    kurt -= 3

    res += '%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f ' % (mean, mx, mn, ptp, std, var, skew, kurt)
    # if ii < 18:
    #     res += '%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f ' % (mean, mx, mn, ptp, std, var, skew, kurt)
    # else:
    #     res += '%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f' % (mean, mx, mn, ptp, std, var, skew, kurt)

print(res)

发表于 2025-10-14 16:51:55 回复(0)