有沒有更快的方法來創建下列數組?我需要創建一個數組進一步計算。 這個數組的創建花費了很多時間來運行。基本上,我需要創建一個系列或大小的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)
有沒有更快的方法來創建下列數組?我需要創建一個數組進一步計算。 這個數組的創建花費了很多時間來運行。基本上,我需要創建一個系列或大小的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)
您沒有使用熊貓比系列以外的任何目的是一個容器,所以它會更快從這個計算中刪除熊貓。
推測地,norm
是scipy.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
什麼'5'意思在做什麼? 'x'是爲了用於某些事情嗎? – DSM 2014-09-29 20:42:28
在norm.ppf(概率,平均值,標準差)中,10是平均值,5是標準差。我的代碼將爲nts的每個元素應用norm.ppf。 – Manu9 2014-09-29 20:56:04
但是你的括號是錯誤的,所以你的代碼在語法上不是有效的,'5'不是'norm.ppf'的參數。 (見10.之後的')') – DSM 2014-09-29 20:57:16