我有一条记录,它包含一个DateTime数组和2个双数组,它们的长度相同,并且与索引相关。
我想根据DateTime的小时得到2个双数组之间的delta的平均值。所以我最终会有24个平均值。数组索引0中的所有数据都是相同的/同时发生的,对所有索引都是如此。也许我应该有1个元组或记录数组,每个元组只保存一个日期时间和2个双精度数。
但无论如何这是我到目前为止所做的:
let data2 = [ for i in 0..data.Date.Length-1 do
yield data.Date.[i].Hour, data.High.[i] - data.Low.[i]]
这是我经验不足的最痛苦的地方。我能想到的唯一一件事就是做一些匹配或者说句经历了24小时(0-23)的所有时间,并且每小时都有单独的可变值。必须有一个更简单的方法。到目前为止,我找不到办法。
答案 0 :(得分:1)
我想你想做
let grouped = data2 |> Seq.GroupBy (fst) |> Seq.map (fun (a,b) -> Seq.average (b |> Seq.map (snd)))
此处Seq.groupBy
将对具有相同第一个元素的所有元素进行分组。然后,您可以使用Seq.average
取平均值。
注意:
我认为data2的原始表达式更好地写为
data.Date |> Array.mapi (fun i t -> t.Hour,data.High.[i]-data.Low.[i])