0

我正在研究一种算法,可以选择一组具有特定特征的日期/时间对象,但没有成功。

要使用的数据在日期/时间对象列表中,例如:

lstDays[i][j],
i <= 日期选择器,
j <= 时间选择器

问题是什么?我需要一组最近的日期/时间对象。这组的每一次都必须来自不同的日子

例如:[2012-09-09 12:00,2012-09-10 12:00, 2012-09-11 12:00]

一组日期/时间对象的这个例子是最好的例子,因为它最小化为零。

重要的

试图将其置于上下文中:我想观察一个现象是否在不同的日子同时发生。如果不是,我想评估小时之间的距离是否适合我的学习。

我想要任何天数和时间的通用算法。此算法应返回所有日期时间对象集及其时间距离:

[2012-09-09 12:00,2012-09-10 12:00, 2012-09-11 12:00], 0
[2012-09-09 13:00,2012-09-10 13:00, 2012 -09-11 13:05],5

等等。

:: "0",因为日期时间对象第一行的所有时间之间的差异为零秒。
:: "5",因为第二行上所有时间与 datetime 对象之间的差异是 5 秒。

编辑:代码在这里

for i in range(len(lstDays)):
    for j in range(len(lstDays[i])):
        print lstDays[i][j]

输出:

2013-07-18
11:16:00 2013-07-18 12:02:00
2013-07-18 12:39:00
2013-07-18 13:14:00
2013-07-18 13:50:00
2013-07-19 11:30:00
2013-07-19 12:00:00
2013-07-19 12:46:00
2013-07-19 13:19:00
2013-07-22 11:36:00
2013-07-22 12:21:00
2013-07-22 12:48:00
2013-07-22 13:26:00
2013-07-23 11:18:00
2013-07-23 11:48:00
2013-07-23 12:30:00
2013-07-23 13:12:00
2013-07-24 11:18:00
2013-07-24 11:42:00
2013-07-24 12:20:00
2013-07-24 12:52:00
2013-07-24 13:29:00

注意:lstDays[i][j] 是一个日期时间对象。

lstDays = [ [/*第 i 天的日期时间对象*/]、[/*第 i+1 天的日期时间对象*/]、[/*第 i+2 天的日期时间对象/*]、...]

我并不担心先验的性能。

希望你能帮助我!(:

4

2 回答 2

0

您始终可以将时间计算到一个列表中,然后估计差异,并将那些低于该限制的对象分组。全部打包到一个字典中,其中差异作为值,时间戳作为键。如果这不是您所需要的,我很确定应该很容易从中选择您需要的任何结果。

import numpy
import datetime
times_list = [object1.time(), object2(), ..., objectN()]
limit = 5 # limit of five seconds
groups = {}
for time in times_list:
    delta_times = numpy.asarray([(tt-time).total_seconds() for tt in times_list])
    whr = numpy.where(abs(delta_times) < limit)[0]
    similar = [str(times_list[ii]) for ii in whr]
    if len(similar) > 1:
        similar.sort()
        max_time = numpy.max(delta_times[whr])   # max? median? mean?
        groups[tuple(similar)] = max_time
于 2013-08-22T22:40:56.250 回答
0

生成直方图:

hours = [0] * 24
for object in objects:                # whatever your objects are
    # assuming object.date_time looks like '2013-07-18 10:55:00'
    hour = object.date_time[11:13]    # assuming the hour is in positions 11-12
    hours[int(hour)] += 1

for hour in xrange(24):
    print '%02d: %d' % (hour, hours[hour])
于 2013-08-22T22:41:25.490 回答