python 中的标准偏差

Standard deviation in python

这是我要分析的光谱。如何测量不包括存在峰值的通道的标准偏差? 假设峰值出现在 30,000m/s 和 90,000m/s 之间。

numpy.std()

为了排除峰值,您必须定义您认为峰值的内容 - 否则您将只为您提供的曲线制定解决方案。

如果你知道: (i) 您的数据在 0 附近振荡, (ii) 并且没有大量的低谷(即非常负的最小值), (iii) 并且它应该大致平衡在 0 附近 然后你可以用它来定义一个峰值大于 min

绝对值的 2 倍
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) 中的任何一项,那么您将不得不执行一些过滤。这里有一个有用的 link 可以帮助您开始实现这一目标: https://ocefpaf.github.io/python4oceanographers/blog/2015/03/16/outlier_detection/

Preamble Lidia,这是你的第一个问题。通常,您发布的此类问题不会在 Whosebug 上得到解答。这不是提供解决方案的服务,而是帮助您自己找到解决方案的服务。因此,下次不仅要添加问题,最重要的是还要添加你所知道的、所想的以及到目前为止为解决它所做的事情——这样我们才能真正帮助你。

您的数据只是一系列数据(x_i、y_i)。根据

循环计算均值和方差(https://en.wikipedia.org/wiki/Variance)

=1/N sum_i^N y_i

=1/N sum_i^N y_i**2

和利用

方差 = - **2

以及

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)