【问题标题】:Standard deviation in python [closed]python中的标准偏差[关闭]
【发布时间】:2021-04-12 08:18:41
【问题描述】:

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

【问题讨论】:

标签: python astronomy spectrum


【解决方案1】:

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/

【讨论】:

    【解决方案2】:

    序言 Lidia,这是你的第一个问题。通常,您发布的此类问题不会在 stackoverflow 上得到解答。这不是提供解决方案的服务,而是帮助您自己找到解决方案的服务。因此,下一次不仅要添加问题,而且最重要的是要添加您所知道的、所想的以及迄今为止为解决该问题所做的工作——这样我们才能真正帮助您。

    您的数据只是一系列数据(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)
    

    【讨论】:

    • 感谢您接受我的问题。我尝试实现 ths 代码,但收到一条错误消息:variance = (sum2/count) - (pow(sum/count, 2)) ZeroDivisionError: float 除以零
    • 问题是 count 在您的情况下仍然为 0。请调查您在 xy 中的值,并检查这段非常简单的代码的逻辑,找出为什么会这样。
    猜你喜欢
    • 2018-05-17
    • 2021-01-31
    • 1970-01-01
    • 2019-08-16
    • 2021-11-30
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多