是否有更快的方法来创建以下数组?我需要创建一个数组用于进一步计算。 这个数组的创建需要花费大量的时间来运行。基本上我需要创建一个系列或数组,其值为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 :(得分:6)
除了将Series作为容器之外,你没有将Pandas用于任何其他目的,因此将Pandas从这个计算中删除会更快。
据推测,norm
是scipy.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