Python 有效的经验CDF计算/存储

Python 有效的经验CDF计算/存储,python,optimization,statistics,bioinformatics,Python,Optimization,Statistics,Bioinformatics,我试图预先计算几个随机变量的分布。特别是,这些随机变量是在基因组中某个位置评估功能的结果,因此每个随机变量的值大约为10^8或10^9。函数非常平滑,所以我不认为每2/10/100次评估一次会损失很多精度?基地左右,但无论如何都会有大量的样本。我的计划是为每个函数预计算分位数表(可能是百分位数),并在执行主程序时引用这些分位数表,以避免每次运行时都必须计算这些分布统计信息 但我真的不知道如何轻松地做到这一点:存储、排序和减少10^9个浮点数组实际上是不可行的,但我想不出另一种不丢失有关分布信息的

我试图预先计算几个随机变量的分布。特别是,这些随机变量是在基因组中某个位置评估功能的结果,因此每个随机变量的值大约为10^8或10^9。函数非常平滑,所以我不认为每2/10/100次评估一次会损失很多精度?基地左右,但无论如何都会有大量的样本。我的计划是为每个函数预计算分位数表(可能是百分位数),并在执行主程序时引用这些分位数表,以避免每次运行时都必须计算这些分布统计信息


但我真的不知道如何轻松地做到这一点:存储、排序和减少10^9个浮点数组实际上是不可行的,但我想不出另一种不丢失有关分布信息的方法。有没有一种方法可以测量样本分布的分位数,而不需要将整个数据存储在内存中?

我同意@katriealex的评论:询问具有强大统计背景的人

您可以很容易地评估最小/最大/平均/标准偏差,而不需要存储大量内存。(注:平均值+标准偏差:使用Knuth技术:

delta = x - m[n-1]
m[n] = m[n-1] +  1/n * delta
S[n] = S[n-1] + (x[n] - m[n])*delta
mean = m[n]
std dev = sqrt(S[n]/n)
这可以防止在std dev的原始计算中遇到浮点溢出/下溢问题,例如,另请参见。)

可能还有其他面向流的算法来计算更高的分布特征矩,但我不知道它们是什么


或者,您也可以使用具有足够的容器的技术来描述分布。

我认为您可能会在……多少变量上更幸运?功能有多“流畅”?你能用局部多项式来插值吗?这些函数表示不同类型基因的接近程度。我想尝试不同的指标,但它们都可以归结为(某种)距离最近的X型基因的距离。因此,这些值可能看起来像是:一次又一次地重复(具有不同的高度和长度),直方图几乎可以有任何形状,这取决于相关基因之间的距离。是不是稍微清楚一点?使用CDF,我可以计算一个位置的分数以及偶然获得这么高分数的概率。平均值和标准差不足以计算这个分数,但我认为binning实际上会很好,特别是因为我可以自由地规范我的分数函数,以便我知道上下限。谢谢你的建议。