不同日子之间的变化较小

时间:2013-08-22 22:07:52

标签: algorithm combinations permutation pseudocode

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

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

  

lstDays [i] [j],
我< = day chooser,
j< = time chooser

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

例如:[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”,因为datetime对象第一行上所有时间之间的差异为零秒。
:: “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 = [[/ * datetime对象从一天i * /],[/ * datetime对象从一天i + 1 * /],[/ * datetime对象从一天i + 2 / *] ,. ..]

我并不担心性能,先验。

希望你能帮助我! (:

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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])