private Layer[] CreateNeurons(IOutput[] outputs, int numberOfNeurons) { //These will all form a layer List <Synapse> allSynapses = new List <Synapse>(numberOfNeurons * outputs.Length); //These will form another layer Neuron[] neurons = new Neuron[numberOfNeurons]; for (int neuronIndex = 0; neuronIndex < numberOfNeurons; neuronIndex++) { Synapse[] synapses = outputs .Select(o => new Synapse(o, _randomNumberGenerator.Next())) .ToArray(); allSynapses.AddRange(synapses); neurons[neuronIndex] = new Neuron(synapses.Cast <IOutput>().ToArray(), _randomNumberGenerator.Next()); } return(new Layer[] { new Layer(allSynapses.Cast <IPropagate>().ToArray(), allSynapses.Cast <IOutput>().ToArray()), new Layer(neurons.Cast <IPropagate>().ToArray(), neurons.Cast <IOutput>().ToArray()), }); }