(возможно) Ответ
Вы можете попробовать это:
Since = 0
for i in range(1, Data.shape[0]):
#Switched off
if Data[i, 1] == 0.0 and Data[i - 1, 1] == 1.0:
print "{0} for {1}min".format(Data[i, 0], i - Since)
#Switched on
elif Data[i, 1] == 1.0 and Data[i - 1, 1] == 0.0:
Since = i
Вы перебираете массив отверстий (Data
), в первом столбце которого есть метки времени, а во втором столбце - 1.0
или 0.0
в зависимости от того, включен или выключен нагреватель.
Вы обнаруживаете изменение состояния, глядя на фактическое значение вкл / выкл и предыдущее. В зависимости от этих двух значений вы видите, был ли нагреватель Switched off
или Switched on
. Все, что вам нужно сделать, это сохранить значение текущего индекса в Since
, и вы получите время включения нагревателя.
Сценарий
С помощью следующего скрипта вы можете настроить массив данных, запустить приведенный выше код и посмотреть, как он работает:
import datetime
import numpy as np
#Setting up OnOff array
OnOff = np.concatenate((np.zeros((7,)), np.ones((20,)), np.zeros((3,)), np.ones((5,)), np.zeros((4,)), np.ones((16,)), np.zeros((2,)), np.ones((2,)), np.zeros((1,))))
#Setting up time array
start = datetime.time(12, 00)
TimeStamps = []
for i in range(OnOff.size):
TimeStamps.append(datetime.time(12 + i/60, np.mod(i, 60)))
TimeStamps = np.array(TimeStamps)
#Concatenating both arrays to a single array
Data = np.hstack((np.reshape(TimeStamps, (TimeStamps.size, 1)), np.reshape(OnOff, (OnOff.size, 1))))
Since = 0
for i in range(1, Data.shape[0]):
#Switched off
if Data[i, 1] == 0.0 and Data[i - 1, 1] == 1.0:
print "{0} for {1}min".format(Data[i, 0], i - Since)
#Switched on
elif Data[i, 1] == 1.0 and Data[i - 1, 1] == 0.0:
Since = i
Выход
12:27:00 for 20min
12:35:00 for 5min
12:55:00 for 16min
12:59:00 for 2min