Я отбираю процесс Пуассона в миллисекундном масштабе времени, где скорость не фиксирована. Я дискретирую процесс выборки, проверяя каждый интервал дельта размера, существует ли там событие или нет на основе средней скорости в этом интервале. Поскольку я использую Python, он работает немного медленнее, чем я надеялся. Код настоящее время я использую следующий:Как пробовать неоднородные пуассоновские процессы в Python быстрее этого?
import numpy
def generate_times(rate_function,max_t,delta):
times = []
for t in numpy.arange(delta,max_t,delta):
avg_rate = (rate_function(t)+rate_function(t+delta))/2.0
if numpy.random.binomial(1,1-math.exp(-avg_rate*delta/1000.0))>0:
times.extend([t])
return times
функция скорости может быть произвольным, я не ищу для закрытой форме раствора заданной функцией скорости.
Если вы хотите, чтобы некоторые параметры, чтобы играть с вами, можно попробовать:
max_t = 1000.0
delta = 0.1
high_rate = 100.0
low_rate = 0.0
phase_length = 25.0
rate_function = (lambda x: low_rate + (high_rate-low_rate)*0.5*(1+math.sin(2*math.pi*x/phase_length)))
Вы спрашиваете, как _optimize_ '' 'generate_times'''? Может ли он вернуть ndarray или он должен быть списком? – wwii
Не нужно полностью оптимизировать, любой фактор, превышающий 5 во время выполнения, будет иметь огромное значение. И выход должен быть списком (вы можете преобразовать ndarray в список в конце, если это быстрее ...: P). – Haffi112
'' 'generate_times''' кажется неполным, он никогда ничего не добавляет к' '' tunes''' – wwii