计算元组列表中的平均值 F#

Calculate average in list of tuples F#

我有一个 3 年降雨量的文本文件,其中年份之后的每个数字对应于月份。 例如,在

2002    1.17    0.78    7.11    5.17    5.84    4.29    1.12    4.06    1.9 2.07    1.47    1.53
2001    1.24    3.22    1.61    3.33    6.55    2.4 3.5 1.32    3.9 6.04    1.69    1.13
2000    1.277   1.4 1.17    5.74    6.48    4.81    4.07    3.19    6.2 1.95    2.65    1.7

2002 年 2 月的平均降雨量为 0.78。

我创建了一个名为 mylist 的元组列表,格式为 (year,values,average,min,max),其中 years 是 int,values 是一个浮点列表,average 是一个 int,对所有 'values', min 是一个 int,包含最小的 'value' 和 max.

我的问题: 如何计算列表中第 n 个元素的平均值,例如一月、二月、三月的平均值...

我有:

 let months = [ "Jan"; "Feb"; "Mar"; "Apr"; "May"; "Jun"; "Jul"; "Aug"; "Sep"; "Oct"; "Nov"; "Dec" ] //string list

我正在考虑以下内容:

mylist |> List.map (fun (_,values, _, _, _) -> average 0th index across all tuples, print Jan, then average 1st index across all tuples, print Feb, etc...)

mylist |> List.map (fun (_,values, _, _, _) -> printfn"%A %A" List.average 0thIndex,0thMonth....List.average 1stIndex, 1stMonth, etc...)

但我对函数式语言还不够熟悉,无法了解列表和地图上的所有操作。我更喜欢 Java 和 C

我会将值映射到列表列表:

 let vs = mylist |> List.map (fun (_, values, _, _, _) -> values)

然后将其转置以获取以月为单位的值列表列表。

 let mvs = vs |> transpose

然后使用以下方法计算平均值:

 let avgs = mvs |> List.map List.average

使用此 answer 的转置。

哦,如果你想以漂亮的方式打印它们:

 avgs |> List.iteri (fun i avg -> printfn "Month %s average: %d" months.[i] avg)