2014-09-29 2 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

+0

В norm.ppf (вероятность, среднее, стандартное отклонение), так что 10 является средним и 5 является std. Мой код будет применять norm.ppf для каждого элемента из lts. – Manu9

+0

Но ваши круглые скобки неуместны, поэтому ваш код не является синтаксически действительным, а '5' не является аргументом для' norm.ppf'. (См. ')' После 10.) – DSM

ответ

6

Вы не используете панд для любых целей, кроме серии является контейнером, так что это будет быстрее вырезать Панды из этого расчета.

Предположительно, norm является scipy.stats.norm. Если это так, первый аргумент norm.ppf может быть массивом numpy. Так будет намного быстрее вызвать norm.ppfраз на массиве NumPy размером 4000, чем звонить 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

+0

Да, это идея. – unutbu

Смежные вопросы