我正在进行MonteCarlo模拟,并且几乎完成了为我的应用程序的那部分编写代码。我有以下列表:
List<List<double>> myFullList = new List<List<double>>();
List<double> myInnerList = new List<double>();
for(int i = 1; i <= numberOfLoops; i++)
{
for(int i = 1; i <= 10; i++)
{
// Populate inner list with random numbers
myInnerList.Add(double myRandomNumber);
}
// Add the inner list to the full list
myFullList.Add(myInnerList);
}
列表应如下所示:
myFullList[0] = {rand#1,rand#2,rand#3,...,rand#10}
myFulllist[1] = {rand#1,rand#2,rand#3,...,rand#10}
.
.
.
.
myFulllist[1] = {rand#1,rand#2,rand#3,...,rand#10}
我需要对这些数据进行平均,以形成一个如下所示的单个列表:
List<double> averagedData = new List<double>();
averagedData = {avg#1, avg#2........avg#10}
此输出变量将平均内部列表中相同“行”数据的数据。
简单示例:
innerList[0] = {1,2,3};
innerList[1] = {3,2,1};
fullList = {innerList[0], innerList[1]};
averageList = {2,2,2};
答案 0 :(得分:5)
如果您只想平均每个内部列表,可以使用:
List<double> averagedData = myFullList.Select(l => l.Average()).ToList();
如果您尝试对数据的“列”进行平均,这似乎是您的示例中的情况,您可以执行以下操作:
var averagedData = myFullList[0].Select((v,c) =>
myFullList.Average(r => r[c])
).ToList();
答案 1 :(得分:-2)
var averagedData = myFullList.Select(x => x.Average()).ToList();