1

我有一条记录,其中包含一个 DateTime 数组和 2 个长度相同且按索引相关的双精度数组。

我想获得基于 DateTime 小时的 2 个双精度数组之间增量的平均值。所以我最终会有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]]

这是我缺乏经验的最痛苦的地方。我唯一能想到的就是做某种匹配或 if 语句通过所有这些 24 小时 (0 - 23) 并且每个小时都有单独的可变值。必须有更简单的方法。到目前为止,我一直没有成功找到方法。

4

1 回答 1

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])
于 2013-04-20T12:19:16.900 回答