python - 有效计算均值和中位数

标签 python performance numpy mean median

按顺序查找 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 = mean(1,2)(即 input_list 中前 2 个值的平均值)
  • 2.3 = mean(1,2,4)(即 input_list 中前 3 个值的平均值)
  • 3.25 = mean(1,2,4,6)(即 input_list 中前 4 个值的平均值) 等

中位数计算如下:

  • 1 = 中位数(1)
  • 1.5 = median(1,2)(即 input_list 中前 2 个值的中值)
  • 2.0 = median(1,2,4)(即 input_list 中前 3 个值的中位数)
  • 3.0 = median(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/

相关文章:

python - Django 注释计数不起作用总是返回 1

python - 使用 rpy2 将 Python 变量传递给 R

performance - CUDA block 大小 1024x1 与 32x32 会有什么性能差异吗?

performance - ConnectionManagement.MaxConnections和ServicePointManager.DefaultConnectionLimit有什么区别?

java - 适当的 Tomcat 5.5 启动参数来调整 JVM 以满足极高的需求、大堆 Web 应用程序?

数组中的 Python Numba 值

python - 如何使用 numpy 改进我的自定义函数矢量化

python - 如何编写一个累加器来围绕中点压缩数组?

python - wxpython:如何使用其他地方创建的网格填充笔记本选项卡?

python - 如何从 `nl` 脚本求解器中从 `pyomo` 获取 `pyomo` 文件?