按顺序查找 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/