繁体   English   中英

C# Arrays列表

[英]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));

至于populationlist 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM