想象一下,你有一个非常大的数组,其中的元素集合无法融入计算机的内存中。您将如何计算Python中此数组的均值,中位数,标准差和其他汇总统计值?
我发现this post以递增方式解释计算均值的数学,并且还提供了一个Python函数,它接受一个列表或一个迭代器对象,但由于我可能无法总是访问迭代器对象,所以我将其实现为一个行为类似于std
的类。但是,如何计算min
,max
,median
,skewness
,kurtosis
,mean
等内容?
下面的代码是一个实现增量min
,max
和class Inc_sumstats(object):
def __init__(self):
self.length = 0
self.mean = 0
#self.std = 0
self.min = np.inf
self.max = 0
#self.median = 0
#self.skewness = 0
#self.kurtosis = 0
def update(self, num):
self.length += 1
self.mean = (self.mean * (self.length - 1) + num) / self.length
#self.std = ...
self.min = num if num < self.min else self.min
self.max = num if num > self.max else self.max
#self.median = ...
#self.skewness = ...
#self.kurtosis = ...
return self
的最小工作示例,并显示其他内容适合的位置:
{{1}}
我知道网站上有similar questions,但到目前为止我找不到任何解决方案。如果我在背景研究中遗漏了某些内容,请链接问题或标记为重复。
答案 0 :(得分:2)
您正在寻找的是用于订单统计的在线算法。在线算法有点像某些统计数据的生成器;它在从内存或磁盘读取数据时会累积数据,因此程序员可以处理内存管理问题并仍能获得正确的输出。
这些算法的实施背后有很多CS理论,但你可以在这里阅读更多相关信息:https://en.wikipedia.org/wiki/Selection_algorithm#Online_selection_algorithm
数学在某种程度上是直观的:你的班级应该更新元素的数量,并重新计算平均值,最小值,最大值,峰度,std-dev等作为前一个值的函数,并将这些值作为元组返回。我向您推荐这个问题,并详细解答如何构建在线统计算法:
"On-line" (iterator) algorithms for estimating statistical median, mode, skewness, kurtosis?