我们可以更快地创建阵列吗?

时间:2014-09-29 20:34:22

标签: python arrays numpy pandas series

是否有更快的方法来创建以下数组?我需要创建一个数组用于进一步计算。 这个数组的创建需要花费大量的时间来运行。基本上我需要创建一个系列或数组,其值为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)

1 个答案:

答案 0 :(得分:6)

除了将Series作为容器之外,你没有将Pandas用于任何其他目的,因此将Pandas从这个计算中删除会更快。

据推测,normscipy.stats.norm。如果是这样,norm.ppf的第一个参数可以是一个numpy数组。因此,在大小为4000的NumPy数组上调用norm.ppf 一次比在浮点数上调用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