【发布时间】:2021-04-12 08:18:41
【问题描述】:
【问题讨论】:
-
排除不想要的数据部分,然后计算std?究竟是什么阻碍了你? How to Ask
-
这个问题中没有python。发布的任何解决方案都可能导致进一步的问题。请参阅How to Ask 以及如何创建minimal reproducible example。
【问题讨论】:
numpy.std()
为了排除峰值,您必须定义要考虑的峰值是什么 - 否则您将只针对您呈现的曲线制定解决方案。
如果你知道: (i) 您的数据在 0 附近波动, (ii) 并且没有大的波谷(即非常负的分钟数), (iii) 并且它应该大致平衡在 0 左右 那么你可以用它来定义一个峰值大于 2x 的绝对值
list1 = [0,1,2,15,-2,3,-3,5]
list2 = [ent for ent in list1 if ent < 2*abs(min(list1))]
std1 = numpy.std(list1)
std2 = numpy.std(list2)
如果您的数据未通过 (i)、(ii) 或 (iii) 中的任何一项,那么您将不得不执行一些过滤。这是一个有用的链接,可帮助您开始实现这一目标: https://ocefpaf.github.io/python4oceanographers/blog/2015/03/16/outlier_detection/
【讨论】:
序言 Lidia,这是你的第一个问题。通常,您发布的此类问题不会在 stackoverflow 上得到解答。这不是提供解决方案的服务,而是帮助您自己找到解决方案的服务。因此,下一次不仅要添加问题,而且最重要的是要添加您所知道的、所想的以及迄今为止为解决该问题所做的工作——这样我们才能真正帮助您。
您的数据只是一系列数据(x_i,y_i)。根据
循环计算平均值和方差(https://en.wikipedia.org/wiki/Variance)和
利用
方差 =
还有
RMS = sqrt(方差)
# x is list of x-values of your data
# y is list of y-values of your data
sum = 0.
sum2 = 0.
count = 0
for i in range(len(x)):
if (x[i]<30000 or x[i]>90000): continue
count += 1
sum += y[i]
sum2 += pow(y[i], 2)
variance = sum2/count - pow(sum/count, 2)
RMS = math.sqrt(variance)
【讨论】:
count 在您的情况下仍然为 0。请调查您在 x 和 y 中的值,并检查这段非常简单的代码的逻辑,找出为什么会这样。