迭代for循环python

时间:2017-10-13 00:37:22

标签: python algorithm

我正在制作Python代码,用于查找大于20的样本的mann-whitney u stat。

在此过程中,如果样本排名存在关联,则排名的标准差公式如下:

enter image description here

Source

我特别遇到了求和部分的问题。

这里,“t_i是共享排名i的主题数,k是(不同)排名的数量。”

我有以下排名:

ranks = [ 7. 8. 12. 11. 9. 10. 1. 3. 4.5 2. 6. 4.5]

现在,我编写了以下函数来计算等式的西格玛部分:

sigma = 0
for i in range(1, np.amax(ranks)):
    num =  ranks.count(i)**3 - ranks.count(i)
    denom = (n1+n2)*((n1+n2)-1)
    sigma += num/denom

然而,这是不对的,因为当我从i求k到k时,我正在看整数。我不考虑十进制值的等级,例如4.5。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来最初你试图遍历范围[1, max(ranks)]中的所有整数,这不是总和正在做的事情。总和将迭代排名中的每个唯一元素,并聚合该元素的某个转换。

这是一种更直接的方法。而不是处理索引我迭代元素本身。 t i 将是rank唯一元素集合的第i个元素。每个元素都将被考虑在内。如果它们是整数也无关紧要:

for ti in set(ranks):
        num =  ranks.count(ti)**3 - ranks.count(ti)
        denom = (n1+n2)*((n1+n2)-1)
        sigma += num/denom