我现在正在开展一个项目,需要我处理并存储数百万个不同的双打。所以我认为存储所有这些值的最有效方法是在数组中的数组。但我不知道该怎么做。另外,我必须将值提供给较低级别的数组,并且还不知道这样做的有效方法。
以下是尝试解释我的目标(这不是代码,但网站认为是):
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次。
答案 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]);