使用for循环计算分类数据集滑动窗口标准差的问题求助
滑动窗口标准差计算修正方案
现有代码问题
- 循环内重复初始化
listt1,导致最终输出为空 - 标准差计算结果错误追加到了存储均值的
listt列表,没有存入标准差结果列表 - 未定义
std计算函数,也未引入第三方库的标准差方法,无法得到正确计算结果
与自定义均值逻辑一致的实现方案
你之前的均值是手动实现的,这里对应手动实现标准差计算函数即可,默认提供总体标准差(除以窗口长度n)实现,如果你需要样本标准差,把除数改成len(dataset)-1即可:
# 自定义标准差计算函数,和你自定义mean的逻辑对齐 def std(dataset): avg = sum(dataset)/len(dataset) variance = sum((x - avg)**2 for x in dataset) / len(dataset) return variance ** 0.5 # 修正后的标准差计算逻辑 listt1 = [] # 如果你不需要保留之前的均值,可以重新初始化listt避免结果混淆 # listt = [] for i in range(len(x_)): globals()['a'+str(i)] = list(x_[i]) # 可以保留均值计算,也可以删掉,按需调整 # listt.append(mean(x_[i])) listt1.append(std(x_[i])) print(listt1)
基于numpy的快捷实现方案
因为你已经把窗口结果转成了numpy数组x_,可以直接用numpy的向量化操作完成计算,不需要写循环,效率更高:
# 计算每个窗口的总体标准差,ddof=0对应总体标准差,ddof=1对应样本标准差 import numpy as np listt1 = np.std(x_, axis=1, ddof=0).tolist() print(listt1)
内容的提问来源于stack exchange,提问作者sanaz
相关产品推荐
相关产品推荐

