2016-09-30 4 views
0

Я пытаюсь создать кумулятивный список, но мой вывод явно не является совокупным. Кто-нибудь знает, что я делаю неправильно? БлагодаряСписок совокупных сумм

import numpy as np 
import math 
import random 

l=[] 
for i in range (50): 
    def nextTime(rateParameter): 
     return -math.log(1.0 - random.random())/rateParameter 
    a = np.round(nextTime(1/15),0) 
    l.append(a) 
np.cumsum(l) 
print(l) 
+0

питона 3 я полагаю? Почему деление на 1/15, когда вы можете умножить на 15? потери точности и скорости. –

+0

Я пытаюсь использовать распределение пуассона, где lambda = 15. Это код, который мне было поручено использовать. –

ответ

1

Совокупная сумма не принимается вместо, вы должны присвоить возвращаемое значение:

cum_l = np.cumsum(l) 
print(cum_l) 

Вам не нужно поместить эту функцию в цикле for. Если вы оставите его снаружи, вы не сможете определить новую функцию на каждой итерации, и ваш код будет по-прежнему давать ожидаемый результат.

+0

Ах, спасибо! Извините, я новичок –

+0

@ChristopherFlach Если ответ решил вашу проблему, вы можете подумать о его принятии :) –

+0

Еще раз спасибо! Я здесь новенький :) –

0

Если вы используете numpynumpy, то есть путь, однако, если все, что вам нужно сделать, это предоставить накопленную сумму, то Python3 приходит с itertools.accumulate:

def nextTime(rateParameter): 
    while True: 
     yield -math.log(1.0 - random.random())/rateParameter 

>>> list(it.accumulate(map(round, it.islice(nextTime(1/15), 50)))) 
[2, 9, 14, 26, 27, ...] 
Смежные вопросы