在Python列表中顺序查找行的均值和中位数的最有效方法是什么?

例如,我的列表:

input_list = [1,2,4,6,7,8]

我想产生一个包含以下内容的输出列表:
output_list_mean = [1,1.5,2.3,3.25,4,4.7]
output_list_median = [1,1.5,2.0,3.0,4.0,5.0]

平均值计算如下:
  • 1 =平均值(1)
  • 1.5 =平均值(1,2)(即input_list中前两个值的平均值)
  • 2.3 =平均值(1,2,4)(即input_list中前三个值的平均值)
  • 3.25 =平均值(1,2,4,6)(即input_list中前4个值的平均值)

  • 并且中位数计算如下:
  • 1 =中位数(1)
  • 1.5 =中位数(1,2)(即input_list中前两个值的中位数)
  • 2.0 =中位数(1,2,4)(即input_list中前3个值的中位数)
  • 3.0 =中位数(1,2,4,6)(即input_list中前4个值的中位数)

  • 我尝试使用以下循环来实现它,但是效率似乎很低。
    import numpy
    
    input_list = [1,2,4,6,7,8]
    
    for item in range(1,len(input_list)+1):
        print(numpy.mean(input_list[:item]))
        print(numpy.median(input_list[:item]))
    

    最佳答案

    您自己做的任何事情,尤其是使用中位数,都将需要很多工作,或者效率很低,但是Pandas内置了您要执行的函数的高效实现,扩展的平均值为O(n),使用跳过列表,扩展中位数为O(n * log(n)):

    import pandas as pd
    import numpy as np
    
    input_list = [1, 2, 4, 6, 7, 8]
    
    >>> pd.expanding_mean(np.array(input_list))
    array([ 1.     ,  1.5    ,  2.33333,  3.25   ,  4.     ,  4.66667])
    
    >>> pd.expanding_median(np.array(input_list))
    array([ 1. ,  1.5,  2. ,  3. ,  4. ,  5. ])
    

    关于python - 有效计算平均值和中位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31370214/

    10-13 01:48