0

10 個 (1000,1000) の numpy 配列があります。各配列要素には、1 日の時間を表す float が含まれています。例: 14.0 = 午後 2 時、15.75 = 午後 15 時 45 分。

これらの配列間の最大の違いを見つけたいです。結果は、配列要素ごとに、10 個の配列間の最大差を含む単一の (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配列でうまく再生する方法がわかりません。


編集:時間は、特定のイベントが発生する平均時間を参照するため、特定の日付に関連付けられていません. したがって、2 時間の差は 22 時間または 2 時間として正しく解釈できます。ただし、私は常に、これら 2 つの可能な解釈のうち最小限のものを採用したいと考えています。

4

3 に答える 3

1

サイクルの中心位置 (12.0) を中心に 1 つの値を配置することで、2 つの循環値の差を取ることができます。相対的な違いを維持するために、他の値を同じ量だけ回転させます。すべてを範囲内に保つために、サイクルの期間までに調整された値のモジュラスを取得します。最大可能距離が +/- 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

午後 11 時と午前 1 時の数字があり、最小距離を求めたいとします。

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

diff0 から 24 時間の範囲の時差の配列がある場合、次のように間違って計算された値を修正できます。

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