Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 00:59:00
- 01:01:00
- 00:59:00 -> 3540 seconds
- 01:01:00 -> 3660 seconds
- ============
- average: 3600 seconds converted to HH:MM:SS -> 01:00:00
- from datetime import timedelta
- times = ['00:58:00','00:59:00','01:00:00','01:01:00','01:02:00']
- print(str(timedelta(seconds=sum(map(lambda f: int(f[0])*3600 + int(f[1])*60 + int(f[2]), map(lambda f: f.split(':'), times)))/len(times))))
- import time
- a = time.strptime("2000:11:12:13","%Y:%H:%M:%S")
- b = time.strptime("2000:11:14:13","%Y:%H:%M:%S")
- avg_time = time.localtime(((time.mktime(a)+time.mktime(b))/2))
- >> time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=11, tm_min=13, tm_sec=13, tm_wday=5, tm_yday=1, tm_isdst=0)
- import datetime
- import math
- import numpy
- def datetime_to_radians(x):
- # radians are calculated using a 24-hour circle, not 12-hour, starting at north and moving clockwise
- time_of_day = x.time()
- seconds_from_midnight = 3600 * time_of_day.hour + 60 * time_of_day.minute + time_of_day.second
- radians = float(seconds_from_midnight) / float(12 * 60 * 60) * 2.0 * math.pi
- return radians
- def average_angle(angles):
- # angles measured in radians
- x_sum = numpy.sum([math.sin(x) for x in angles])
- y_sum = numpy.sum([math.cos(x) for x in angles])
- x_mean = x_sum / float(len(angles))
- y_mean = y_sum / float(len(angles))
- return numpy.arctan2(x_mean, y_mean)
- def radians_to_time_of_day(x):
- # radians are measured clockwise from north and represent time in a 24-hour circle
- seconds_from_midnight = int(float(x) / (2.0 * math.pi) * 12.0 * 60.0 * 60.0)
- hour = seconds_from_midnight / 3600
- minute = (seconds_from_midnight % 3600) / 60
- second = seconds_from_midnight % 60
- return datetime.time(hour, minute, second)
- def average_times_of_day(x):
- # input datetime.datetime array and output datetime.time value
- angles = [datetime_to_radians(y) for y in x]
- avg_angle = average_angle(angles)
- return radians_to_time_of_day(avg_angle)
- average_times_of_day([datetime.datetime(2017, 6, 9, 0, 10), datetime.datetime(2017, 6, 9, 0, 20)])
- # datetime.time(0, 15)
- average_times_of_day([datetime.datetime(2017, 6, 9, 23, 50), datetime.datetime(2017, 6, 9, 0, 10)])
- # datetime.time(0, 0)
- time_list = map(lambda s: int(s[6:8]) + 60*(int(s[3:5]) + 60*int(s[0:2])), mylist)
- average = sum(time_list)/len(time_list)
- bigmins, secs = divmod(average, 60)
- hours, mins = divmod(bigmins, 60)
- print "%02d:%02d:%02d" % (hours, mins, secs)
- from cmath import rect, phase
- from math import radians, degrees
- def meanAngle(deg):
- complexDegree = sum(rect(1, radians(d)) for d in deg) / len(deg)
- argument = phase(complexDegree)
- meanAngle = degrees(argument)
- return meanAngle
- def meanTime(times):
- t = (time.split(':') for time in times)
- seconds = ((float(s) + int(m) * 60 + int(h) * 3600)
- for h, m, s in t)
- day = 24 * 60 * 60
- to_angles = [s * 360. / day for s in seconds]
- mean_as_angle = mean_angle(to_angles)
- mean_seconds = mean_as_angle * day / 360.
- if mean_seconds < 0:
- mean_seconds += day
- h, m = divmod(mean_seconds, 3600)
- m, s = divmod(m, 60)
- return '%02i:%02i:%02i' % (h, m, s)
- print(meanTime(["15:00:00", "21:00:00"]))
- # 18:00:00
- print(meanTime(["23:00:00", "01:00:00"]))
- # 00:00:00
Add Comment
Please, Sign In to add comment