У меня есть некоторые события с шагами времени начала и окончания. Массив «start» представляет начальные временные шаги для 4 событий, массив «end» представляет конечные временные шаги для этих событий, а массив «prop» содержит одно числовое свойство для каждого события (например, 2-е событие (1 индекс), начатое во время шаг 12 и закончен на этапе 14 времени, и его свойство равно 20). Массив «diff» показывает разницу между событиями (от конца предыдущего события до начала следующего). Разница во времени между окончанием 1-го события и началом 2-го события составляет 7 шагов. Массив «diff» меньше других массивов («start», «end», «prop») на 1 элемент.
import numpy as np
start=np.array([3,12,16,30])
end = np.array([5,14,18,32])
prop=np.array([10,20,10,30])
diff=np.zeros(len(start)-1)
for i in range(1,len(start)):
diff[i-1] = start[i] - end[i-1]
print('diff',diff)
diff [ 7. 2. 12.]
События, которые близки по времени, должны объединяться. Если разница между двумя соседними событиями меньше 3-х шагов, их необходимо объединить. Например, 2-е и 3-е события отличаются на 2 временных шага, поэтому они сливаются в новое событие, начало которого - временной шаг: 12, а его конечный временной шаг - 18). Что касается массива «prop», то необходимо сохранить максимум prop[i]
между объединенными событиями (prop[1] >prop[2]
), поэтому 20 будет назначено новому объединенному событию (merged_prop[1]=20
). Я хотел бы иметь 3 новых массива с характеристиками всех событий (слитых и не слитых), таких как:
merged_start=np.array([3,12,30])
merged_end = np.array([5,18,32]) #2nd and 3rd event have been merged
merged_prop=np.array([10,20,30])
Я также приложил еще один более крупный пример, чтобы более четко понять, чего я хочу. 2-е и 3-е события слились в одно большое событие, также как и 4-е до (включительно) 7-го.
start_2=np.array([3,12,16,38,42,46,50,60])
end_2= np.array([5,14,32,40,44,48,54,70])
prop_2= np.array([10,8,20,10,35,10,10,10])
diff_2=np.zeros(len(start_2)-1)
for i in range(1,len(start_2)):
diff_2[i-1] = start_2[i] - end_2[i-1]
print('diff_2',diff_2)
diff_2 [7. 2. 6. 2. 2. 2. 6.]
#Desirable outputs
merged_start_2=np.array([3,12,38,60])
merged_end_2 = np.array([5,32,54,70])
merged_prop_2= np.array([10,20,35,10])
Другой пример
start_3 = np.array([ 3, 12, 18, 38, 42, 46, 50, 60])
end_3 = np.array([ 5, 14, 32, 40, 44, 48, 54, 70])
prop_3 = np.array([10, 8, 20, 10, 35, 10, 10, 10])
#Desirable outputs
merged_start_3=np.array([3,12,18,38,60])
merged_end_3 = np.array([5,14,32,54,70])
merged_prop_3= np.array([10,8,20,35,10])
Как я могу это сделать? Я могу извлечь индексы из массивов "diff", "diff_2", значения которых меньше 3, но я не знаю, как продолжить.