计算样本基尼系数的一种方法是使用基尼系数2倍的相对平均差(RMD)。RMD取决于平均差,由下式得出:
所以我需要计算一个示例(yi - yj)
中元素对之间的每个差异。我花了不少时间才想出一个办法,但我想知道是否有一个函数可以为您实现这一点。在
我首先尝试了大量的数据,但这是非常缓慢的:
In [124]:
%%timeit
from itertools import permutations
k = 0
for i, j in list(permutations(s,2)):
k += abs(i-j)
MD = k/float(len(s)**2)
G = MD / float(mean(s))
G = G/2
G
10000 loops, best of 3: 78 us per loop
然后我尝试了以下不太容易理解但速度更快的方法:
^{pr2}$有没有什么东西既有效又容易概括?例如,如果我想对三个指数求和呢?在
这是我使用的样本:
sample = array([5487574374, 686306, 5092789, 17264231, 41733014,
60870152, 82204091, 227787612, 264942911, 716909668,
679759369, 1336605253, 788028471, 331434695, 146295398,
88673463, 224589748, 128576176, 346121028])
gini(sample)
Out[155]:
0.2692307692307692
谢谢!在
对于您给出的MD示例,可以通过排序来利用它,您可以实现O(N*Log(N))而不是O(N^2)
通常,您必须使用动态编程或其他技术来加快速度,我不确定是否有“一种方法适合所有人”的解决方案。在
相关问题 更多 >
编程相关推荐