我正在採樣一個毫秒時間尺度的泊松過程,其中速率不固定。我通過檢查尺寸增量的每個間隔來檢查抽樣過程是否存在或不存在基於該間隔內的平均速率的事件。由於我使用Python,它的運行速度比我希望的要慢。目前我正在使用的代碼如下:如何比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)))
你在問怎麼優化''''generate_times'''嗎?它可以返回一個ndarray還是它必須是一個列表? – wwii
它不需要完全優化,運行時的任何因子大於5都會產生巨大的差異。輸出必須是一個列表(如果速度更快......:P,則可以將ndarray轉換爲列表)。 – Haffi112
'''generate_times'''似乎不完整,它從不向'''tunes'''增加任何東西。 – wwii