2014-03-25 31 views
0

假設住宅銷售數字的範圍提出了一個小鎮numpy的位數:使用的分級數據

< $100,000    204 
$100,000 - $199,999 1651 
$200,000 - $299,999 2405 
$300,000 - $399,999 1972 
$400,000 - $500,000  872 
> $500,000    1455 

我想知道哪些房子價格斌給定的百分比下降。有沒有使用numpy的percentile函數來做到這一點的方法?我可以自己動手完成它:

import numpy as np 
a = np.array([204., 1651., 2405., 1972., 872., 1455.]) 
b = np.cumsum(a)/np.sum(a) * 100 
q = 75 
len(b[b <= q]) 
4  # ie bin $300,000 - $399,999 

但有使用np.percentile,而不是一個辦法嗎?

回答

1

你幾乎有:

cs = np.cumsum(a) 
bin_idx = np.searchsorted(cs, np.percentile(cs, 75)) 

至少在這種情況下(以及一些其他具有較大a陣列),這不是任何更快,但:

In [9]: %%timeit 
    ...: b = np.cumsum(a)/np.sum(a) * 100 
    ...: len(b[b <= 75]) 
    ...: 
10000 loops, best of 3: 38.6 µs per loop 

In [10]: %%timeit 
    ....: cs = np.cumsum(a) 
    ....: np.searchsorted(cs, np.percentile(cs, 75)) 
    ....: 
10000 loops, best of 3: 125 µs per loop 

所以,除非你想爲了檢查多個百分點,我會堅持你擁有的。