Насколько я понимаю, вы хотите, чтобы окно мертвого времени увеличивалось каждый раз, когда на датчик воздействует событие («единица»), когда оно уже находится в парализованном состоянии.Я считаю, что следующий код делает это.Хитрость заключается в том, чтобы использовать внутренний цикл while, чтобы вы могли динамически изменять границы цикла, поскольку это не представляется возможным с помощью цикла for в python.Я не удалял операторы print, чтобы было легче увидеть, откуда приходят данные, приведенные позже.
import numpy as np
np.random.seed(468316)
random_set = np.random.poisson(lam=1, size = 30) #The source is making the elements with Poisson distribution
#lam could be any other value
d = 2 #dead time, could be any other integers
#Saturation effect
#detector could not detect more than one elements at a time
random_set[random_set>1] = 1
print('###initial random set')
print(random_set)
#set max index
max_index = random_set.shape[0] - 1
print('i', '\t', 'j', '\t', 'dt', '\t',' i+dt+1')
#Paralyzable dead time effect
for i,val in enumerate(random_set):
#see if current value is an event
if val == 1:
#if so, set next d elements to zero
dt = d
#emulate 'for j in range(i+1, i+dt+1):' with a while loop
j = i+1 if i < max_index else max_index
while j < i+dt+1:
print(i, '\t',j, '\t', dt, '\t', i+dt+1)
#if an event is foud within the d window, increase dt by another d
if random_set[j]==1:
random_set[j]=0
dt += d
#dont let the i+dt+1 to get out of the bounds of the random_set
if i+dt+1 > max_index:
dt = max_index - i
j += 1
print('###final random set')
print(random_set)
Это приводит к следующему random_set (я использовал другое начальное и длина для презентабельного примера).В приведенном ниже списке i обозначает индекс внешнего цикла и j внутреннего цикла while.Это означает, что i указывает «единицы», которые будут оставаться в окончательном наборе, а j's указывает диапазон, в пределах которого «те» будут удалены. dt - это размер «мертвого времени» с момента, когда первоначальное событие попало в датчик.Он увеличивается каждый раз, когда в диапазоне [j, i + dt + 1] обнаруживается «единица».При этом i + dt + 1 обозначает внешнюю границу, после которой парализация должна прекратиться.
###initial random set
[1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 1 0 1]
i j dt i+dt+1
0 1 2 3
0 2 2 3
4 5 2 7
4 6 4 9
4 7 4 9
4 8 6 11
4 9 8 13
4 10 10 15
4 11 12 17
4 12 14 19
4 13 14 19
4 14 14 19
4 15 14 19
4 16 14 19
4 17 14 19
4 18 16 21
4 19 16 21
4 20 18 23
4 21 18 23
4 22 18 23
23 24 2 26
23 25 4 28
23 26 6 30
23 27 6 30
23 28 6 30
23 29 6 30
###final random set
[1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
Надеюсь, это решит ее.Пожалуйста, дайте мне знать, если вы неправильно поняли проблему.