[英]C# List of Arrays
我正在研究一种算法,该算法将有一个人口列表,然后每个人口都有一个由 60 个权重组成的列表或数组,这些权重是随机生成的数字。
正如您在我的代码中看到的,我有一个存储 60 个随机值的列表。 我现在需要获取这些值并将它们分配给人口成员列表。 我无法找出如何将随机权重添加到我的人口列表或测试列表中。 人口规模为 60,所有人都有 60 个随机权重。
List<double> randomWeights = new List<double>();
List<List<double>> population = new List<List<double>>();
List<double[]>[] testing = new List<double[]>[60];
//These represent random weights
for (int i = 0; i < 60; i++)
{
randomWeights.Add(((_rand.NextDouble() * 2) - 1 ));
}
for (int i = 0; i < 60; i++)
{
testing[i] = new List<double[]>();
}
//See how these weights perform on the task when applied to the network
double T = GetResults(randomWeights);
我试图将其作为列表中的列表来执行,但是我的讲座告诉我,在列表中包含一个数组会更好。 任何帮助,将不胜感激。
如果您事先知道您的人口规模将是 60 个元素,并且每个人口将有 60 个随机权重元素,那么更有效的方法是为此目的使用锯齿状数组而不是列表。 代码示例如下:
class Program
{
static void Main(string[] args)
{
Random random = new Random();
double [][]population = new double[60][];
for (int populationIndex = 0; populationIndex < 60; populationIndex++)
{
double[] randomWeights = new double[60];
for (int i = 0; i < 60; i++)
{
randomWeights[i] = random.NextDouble() * 2 - 1;
}
population[populationIndex] = randomWeights;
}
}
}
你的问题不是很清楚,据我了解,人口列表本质上是一个列表列表,其中每个项目都包含 randomWeights 值? 它的大小必须是60?
如果是这样,一旦您生成了randomWeights
列表,您可以使用Enumerable.Repeat()
实例化和初始化population
列表,这将复制传递的参数 ( randomWeights
) n 次 ( 60
)
这是一种生成randomWeights
列表的方法,尽管您似乎做得很好
Random r = new Random();
List<double> randomWeights = new List<double>(new double[60].Select(x => r.NextDouble() * 2 - 1));
这就是前面提到的population
列表初始化
List<List<double>> population = new List<List<double>>(Enumerable.Repeat(randomWeights, 60));
至于population
是list of arrays
而不是list of lists
,在我看来,在这种特殊情况下并不重要,但如果你必须这样做,我将编辑我的代码。
我设法自己完成了这项工作。 我发现我可以创建一个列表数组,该数组是我的人口大小,然后每个列表都是权重(随机)。 所以现在我有 60 个人口,他们都有 60 个权重。
var populationSize = 60;
var weights = 60;
List<double>[] populationWeights = new List<double>[populationSize];
List<double> results = new List<double>();
for (int i = 0; i < populationSize; i++)
{
populationWeights[i] = new List<double>();
for(int j = 0; j < weights; j++)
{
populationWeights[i].Add(((_rand.NextDouble() * 2) - 1));
}
}
//See how these weights perform on the task when applied to the network
for(int i = 0; i < populationWeights.Length; i++)
{
results.Add(GetResults(populationWeights[i]));
Console.WriteLine(results[i]);
}
Console.ReadLine();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.