Python 包含时间值的大型numpy数组之间的差异

Python 包含时间值的大型numpy数组之间的差异,python,arrays,numpy,time,python-datetime,Python,Arrays,Numpy,Time,Python Datetime,我有十(10001000)个numpy阵列。每个数组元素都包含一个浮点数,表示一天中的小时。例如,14.0=下午2点,15.75=下午15:45 我想找出这些数组之间的最大差异。结果应该是单个(10001000)numpy数组,对于每个数组元素,包含十个数组之间的最大差值。目前,我有以下几点,似乎效果不错: import numpy as np max=np.maximum.reduce([data1,data2,data3,data4,data5]) min=np.minimum.redu

我有十(10001000)个numpy阵列。每个数组元素都包含一个浮点数,表示一天中的小时。例如,14.0=下午2点,15.75=下午15:45

我想找出这些数组之间的最大差异。结果应该是单个(10001000)numpy数组,对于每个数组元素,包含十个数组之间的最大差值。目前,我有以下几点,似乎效果不错:

import numpy as np

max=np.maximum.reduce([data1,data2,data3,data4,data5]) 
min=np.minimum.reduce([data1,data2,data3,data4,data5])

diff=max-min
但是,它会导致晚上11点和凌晨1点之间22小时的差异。我需要相差2小时。我想我需要以某种方式使用datetime.time,但我不知道如何让datetime与numpy数组配合使用



编辑:时间是指一天中某个事件发生的平均时间,因此它们与特定日期无关。因此,两次差值可以正确解释为22小时或2小时。但是,我始终希望取这两种可能的解释中的最小值。

您可以通过将一个值围绕循环(12.0)中的中心位置居中来取两个循环值之间的差。将其他值旋转相同的量,以保持其相对差异。按周期持续时间取调整值的模数,以使所有内容保持在范围内。您现在已调整时间,以便最大可能距离保持在+/-1/2*周期持续时间(+/-12小时)内

e、 g


如果您没有使用绝对值,则需要根据您希望被视为“第一”的时间来使用符号。

假设您有数字11pm和凌晨1点,并且您希望找到最小距离

1am -> 1
11pm -> 23
那么你可以选择:

23 - 1 = 22
或者

那么距离可以被认为是:

def dist(x,y):
    return min(abs(x - y), 24 - abs(x - y) % 24)
现在我们需要使用
dist
并将其应用于每个组合,如果我没记错的话,有一个更面向
numpy/scipy
的函数来实现这一点,但概念大致相同:

from itertools import combinations

data = [data1,data2,data3,data4,data5]
combs = combinations(data,2)
comb_list = list(combs)
dists = [dist(x,y) for x,y in comb_list]
max_dist = max(dists)

如果您有一个介于0和24小时之间的时间差数组
diff
,您可以对错误计算的值进行如下更正:

diff[diff > 12] = 24. - diff[diff > 12]

如果没有日期,你怎么知道晚上11点和凌晨1点之间的时差是2小时而不是22小时。您需要日期来解决歧义。如果是同一天,则为22小时;如果是连续几天,则为2小时。既然你没有天数,你想知道最小距离吗?正如您的示例所述,它可能是22小时或2小时……时间与日期无关,它们只是指一天中某个事件发生的平均时间。因此,差异可以解释为22小时或2小时,但我始终希望取这两种可能的解释中的最小值。您是在寻找最大的元素比较差异还是所有可能的数组1和数组2对之间的最大差异?我是在寻找最大的元素比较差异。
from itertools import combinations

data = [data1,data2,data3,data4,data5]
combs = combinations(data,2)
comb_list = list(combs)
dists = [dist(x,y) for x,y in comb_list]
max_dist = max(dists)
diff[diff > 12] = 24. - diff[diff > 12]