在C#中使用数组存储数组

时间:2017-07-14 23:40:11

标签: c# arrays

我现在正在开展一个项目,需要我处理并存储数百万个不同的双打。所以我认为存储所有这些值的最有效方法是在数组中的数组。但我不知道该怎么做。另外,我必须将值提供给较低级别​​的数组,并且还不知道这样做的有效方法。

以下是尝试解释我的目标(这不是代码,但网站认为是):

L01 = [1,2,3]
L02 = [3,2,1]
L03 = [2,3,1]
L04 = [1,3,2]

L11 = [L01,L02]
L12 = [L03,L04]

L2 = [L11,L12]

到目前为止,我只想出了这个,你应该明白为什么它不起作用。我对编程还很陌生,所以请解释一下我应该做什么:

    //Stores the weight values attached to an individual neuron 
    public double[] NeuronWeights = new double[321];

    //Stores the NeuronWeights[] for an individual layer with incoming weights
    public double[][] LayerWeight = new double[321][];

    //Stores all of the LayerWeight[] in the network
    public double[][][] TotalWeights = new double[11][][];

    public void InitializWeights()
    {
        for (int i = 0; i < TotalWeights.Length; i++)
        {
           for(int j = 0; j < LayerWeight.Length; j++)
            {
                for(int k = 0; k < NeuronWeights.Length; k++)
                {
                    Random r = new Random();

                    //Creating randome values to fill first level

                    if (r.Next(0, 2) > 0)
                    {
                        NeuronWeights[k] = r.NextDouble() * 2 - 1;
                    }

                    else NeuronWeights[k] = 0.0;

                }

                LayerWeight[j][] = NeuronWeights[];
            }

            TotalWeights[i][][] = LayerWeight[][];
        }
    }
}

添加更多细节;我正在尝试生成并存储321个双打,在每个“层”的(-1,1),321时间范围内。然后对所有11个“层”执行此操作。然后需要调用此信息为其他321个双精度值分配11次。

3 个答案:

答案 0 :(得分:0)

多维数组与数组数组不同。请尝试使用List<>

var L01 = new List<int> { 1,2,3 };
var L02 = new List<int> { 3,2,1 };
var L03 = new List<int> { 2,3,1 };
var L04 = new List<int> { 1,3,2 };

var L11 = new List<List<int>> { L01,L02 };
var L12 = new List<List<int>> { L03,L04 };

var L2 = new List<List<List<int>>> { L11,L12 };

但是根据你想要完成的事情,也许你不需要像这样嵌套List

答案 1 :(得分:0)

看起来你正在尝试创建一个有11层的结构,每层有321个神经元权重?对于存储和使用数百万双打的初始目标而言,这似乎没有任何意义。

如果您只想存储可变数量的图层,每个图层都有可变数量的记录权重,您可以设置如下内容:

List<List<double>> weightData = new List<List<double>>();

您可以将List视为可变大小的数组,可以在您的过程中进行扩展。因此,对于每个图层,您都

List<double> currentLayer = new List<double>();
weightData.add(currentLayer);

然后,对于您想要添加到图层的每个重量,您可以执行以下操作:

double neuronWeight = 17.0;
currentLayer.add(neuronWeight);

在一天结束时,weightData将在图层中包含所有图层和权重。如果您计划在加载数据后操纵数据,则需要提出一个参考各种图层和权重的方案,但我不确定您的用例是什么。

祝你好运!

答案 2 :(得分:0)

这样的东西怎么样,它使用一个多维数组?

int totalWeightLength = 11;
int layerWeightLength = 321;
int neuronWeights = 321;
double[,,] TotalWeights = new double[totalWeightLength, layerWeightLength, neuronWeights];
void InitializWeights()
{
    for (int i = 0; i < totalWeightLength; i++)
    {
        for (int j = 0; j < layerWeightLength; j++)
        {
            for (int k = 0; k < neuronWeights; k++)
            {
                Random r = new Random();

                //Creating randome values to fill first level

                if (r.Next(0, 2) > 0)
                {
                    TotalWeights[i,j,k] = r.NextDouble() * 2 - 1;
                }

                else TotalWeights[i,j,k] = 0.0;
            }
        }
    }
}

InitializWeights();
Console.WriteLine(TotalWeights[1,34,23]);
Console.WriteLine(TotalWeights[2,84,123]);
Console.WriteLine(TotalWeights[3,39,24]);
Console.WriteLine(TotalWeights[4,27,36]);