0

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

我想找到这些数组之间的最大差异。结果应该是单个 (1000,1000) 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

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


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

4

3 回答 3

1

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

例如,

adjustment = arr1 - 12.0
arr2 = (arr2 - adjustment) % 24.0
diff = 12.0 - arr2 # or abs(12.0 - arr2) if you prefer

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

于 2014-05-28T17:10:51.290 回答
0

假设您有数字 11pm 和 1am,并且您想找到最小距离。

1am -> 1
11pm -> 23

然后你有:

23 - 1 = 22

或者,

24 - (23 - 1) % 24 = 2

那么距离可以被认为是:

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)
于 2014-05-28T17:59:04.770 回答
0

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

diff[diff > 12] = 24. - diff[diff > 12]
于 2014-07-18T10:21:33.750 回答