2014-04-22 46 views
34

是否有烘焙Numpy/Scipy函數來查找四分位間距?我能做到這一點很容易地自己,但mean()存在這基本上是sum/len ...你如何在Numpy中找到IQR?

def IQR(dist): 
    return np.percentile(dist, 75) - np.percentile(dist, 25) 
+0

我不認爲它有一個功能,你必須像你一樣計算百分位數。 – BrenBarn

+2

@BrenBarn。現在有... –

回答

60

np.percentile需要多個百分點參數,你稍微更好做:

q75, q25 = np.percentile(x, [75 ,25]) 
iqr = q75 - q25 

iqr = np.subtract(*np.percentile(x, [75, 25])) 

比打兩個電話percentile

In [8]: x = np.random.rand(1e6) 

In [9]: %timeit q75, q25 = np.percentile(x, [75 ,25]); iqr = q75 - q25 
10 loops, best of 3: 24.2 ms per loop 

In [10]: %timeit iqr = np.subtract(*np.percentile(x, [75, 25])) 
10 loops, best of 3: 24.2 ms per loop 

In [11]: %timeit iqr = np.percentile(x, 75) - np.percentile(x, 25) 
10 loops, best of 3: 33.7 ms per loop 
+0

使用ufunc機制,'np.substract.reduce'。恕我直言,比魔法更清晰。 – Davidmh

+0

@Jaime *運算符是什麼?它在做什麼? – Sounak

+2

它在它之後解包元組,以便代替兩個項目序列,函數傳遞兩個單獨的項目。 – Jaime

12

scipy.stats現在有iqr函數。它可用於scipy 0.18.0。我最初的意圖是將其添加到numpy中,但它被認爲太特定於域。

只是使用Jaime的答案,因爲scipy代碼只是一個過於複雜的版本。

+2

爲什麼IQR會被認爲是針對numpy特定領域的? –

+0

因爲它不是一個廣泛使用的指標。請隨時搜索郵件列表以瞭解詳細信息。 –