2014-09-29 81 views
3

有沒有更快的方法來創建下列數組?我需要創建一個數組進一步計算。 這個數組的創建花費了很多時間來運行。基本上,我需要創建一個系列或大小的norm.ppf函數的值的數組4000我們可以通過更快的方式創建一個數組嗎?

nrow = 4000 
lts = pandas.Series(numpy.zeros(nrow)) 
lts = lts.apply(lambda x : norm.ppf(random.random(),10),5)) 
lts = np.asarray(lts, int) 
+0

什麼'5'意思在做什麼? 'x'是爲了用於某些事情嗎? – DSM 2014-09-29 20:42:28

+0

在norm.ppf(概率,平均值,標準差)中,10是平均值,5是標準差。我的代碼將爲nts的每個元素應用norm.ppf。 – Manu9 2014-09-29 20:56:04

+0

但是你的括號是錯誤的,所以你的代碼在語法上不是有效的,'5'不是'norm.ppf'的參數。 (見10.之後的')') – DSM 2014-09-29 20:57:16

回答

6

您沒有使用熊貓比系列以外的任何目的是一個容器,所以它會更快從這個計算中刪除熊貓。

推測地,normscipy.stats.norm。如果是這樣,norm.ppf的第一個參數可以是一個numpy數組。因此,這將是一大堆更快地調用norm.ppf一次尺寸4000的NumPy的陣列上,而不是呼籲彩車norm.ppf 4000次:

lts = norm.ppf(np.random.random(4000), 10, 5).astype('int') 

In [120]: %timeit lts = norm.ppf(np.random.random(4000), 10, 5).astype('int') 
100 loops, best of 3: 2.51 ms per loop 

In [121]: %%timeit 
    .....: lts_orig = pd.Series(np.zeros(nrow)) 
    .....: lts_orig = lts_orig.apply(lambda x : norm.ppf(random.random(),10, 5)) 
    .....: lts_orig = np.asarray(lts_orig, int) 
    .....: 
1 loops, best of 3: 572 ms per loop 
+0

非常感謝@unutbu。對於沒有獲得的人的解釋,lts = norm.ppf(np.random.random(4000),10,5).astype('int')將創建4000個隨機變量並計算範數。 – Manu9 2014-09-29 20:50:31

+0

是的,就是這個想法。 – unutbu 2014-09-29 20:54:42

相關問題