2017-10-13 164 views
3

我正在Python代碼用於查找曼 - 惠特尼U統計樣品超過20迭代在循環蟒蛇

在這個過程中較大的,如果有樣品的排名關係整數和十進制值爲行列的標準偏差公式如下:

enter image description here

我特別是具有與所述求和部分的麻煩。

在這裏,「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求和時,我正在看整數。我不考慮十進制值,如4.5。

我該如何解決這個問題?

+2

你忘了這裏的一些東西:'denom =(n1 + n2)((n1 + n2)-1)'? ;) – alfasin

+1

遍歷*秩*,而不是一個範圍。 I.e'對於隊伍來說:' –

+0

哦,哎呀,你說得對。修正了錯字@alfasin +1 – Jonathan

回答

1

它看起來像最初你試圖循環範圍[1, max(ranks)]範圍內的所有整數,這不是總和正在做的事情。總和遍歷隊列中的每個唯一元素並聚合該元素的某個轉換。

這是一個更直接的方法。我沒有處理索引,而是遍歷元素本身。 t i將收集的第i個元素獨特元素rank。每個元素都將被考慮。它們不會影響它們是否是整數:

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

你的第一個例子很好,但是你的第二個例子不是很好; '因爲我在範圍內(len(someseq)):'是對recidivist C程序員的反模式;它在各方面都變得越來越慢,並且變得越來越乏味。 – ShadowRanger

+0

我知道,但問題讓我以整數索引的方式思考:-(我展示這兩個,因爲我認爲你必須瞭解索引方式,看看它是如何對應於圖像中的總和 –

+0

@ LucasKot-Zaniewski但是,如果隊伍中有重複,例如,我有兩個「4.5」的實例,當我在隊伍中進行測試時,難道不會只計算4.5次兩次? – Jonathan