我正在尝试根据另一个数组中的条件对一个数组进行平均。
//array with a number of dates including hourly data
double[] dates;
//array with values, same length as dates and corresponding data points
double[] vals;
这就是我想做的:
double[] dailyavgs = vals.GroupBy((v, i) => DateTime.FromOADate(dates[i]).Date()).Average().ToArray();
但这失败了。你能指出我正确的方向吗?
最佳答案
您可以选择匿名类型,然后使用GroupBy
:
double[] dailyavgs = vals
.Select((v, i) => new { Date = DateTime.FromOADate(dates[i]).Date, Value = v })
.GroupBy(x => x.Date)
.Select(g => g.Average(x => x.Value))
.ToArray();
另一种类似的方法使用 Enumerable.Zip
:
double[] dailyavgs = vals
.Zip(dates, (v, d) => new { Date = DateTime.FromOADate(d).Date, Value = v })
.GroupBy(x => x.Date)
.Select(g => g.Average(x => x.Value))
.ToArray();
后者有一个优点:如果两个数组的大小不同,它不会引发异常:"如果输入序列的元素数量不同,该方法将组合元素,直到满足以下条件:到达其中一个序列的末尾。例如,如果一个序列有 3 个元素,另一个序列有 4 个元素,则结果序列只有 3 个元素"
关于c# - 根据另一个数组中的条件对一个数组求平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35698590/