我试图在类的构造函数中将锯齿状数组的元素值初始化为0。虽然我能够指定其他变量的值,但是对于这个锯齿状数组这样做是不可能的。
问题是锯齿状数组的尺寸取决于另一个数组的值和属性。这就是我所做的,之后是我想要获得的结果。
public class PattRec
{
public int[] Userspecified;
private double[][][] W = new double[][][] {};
public PattRec()
{
// Here are the specs about the jagged array
Userspecified= new int[] { 3, 5, 1 };
// Here I try to add "Userspecified.Lenght" elements to
// the first dimension of the jagged array
for (int i = 0; i < Userspecified.Length; i++)
{
W[i] = new double[][]
{
new double[]{},
new double[]{},
};
}
// Here I try to set the values of the elements of "W" to 0
// The second and third dimension of the jagged arrays are
// linked to the values in "Userspecified"
for (int i = 1; i < Userspecified.Length; i++)
{
for (int a = 0; a < Userspecified[i]; a++)
{
for (int b = 0; b < Userspecified[i-1]; b++)
{
W[i][a][b] = 0;
}
}
}
}
}
最后,给出
Userspecified= new int[ ] { 3, 5, 1 };
如果指定&#34;手动&#34;,W应具有以下尺寸:
W[0]=new double[ ][ ];
W[1]=new double[5][3];
W[2]=new double[1][5];
显然,我做错了,因为它会抛出数组超出范围的异常。我尝试在SO上使用http://msdn.microsoft.com/en-us/library/2s05feca.aspx和其他问题。
也许我从一开始就做错了......
致以最诚挚的问候,
答案 0 :(得分:0)
我认为你没有正确遍历你的阵列。可以把它想象成一个二维阵列的锯齿状阵列。尝试更类似的内容,改编自this answer
foreach (double[,] array in W)
{
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array[i, j] = 0;
}
}
}
答案 1 :(得分:0)
感谢@tnw的回答,见解和评论。这看起来像我根据它的工作设法完成的代码,它适用于我。
我无法解决一个问题,但是:
我必须暗示“神经元”将包含3个元素,这是99%的时间正确但不灵活。
如果有人知道如何解决这个问题......
无论如何,这是代码:
public class PattRec
{
public int[] neurone;
private double[][][] W = new double[3][][];
public PattRec()
{
neurone = new int[] { 3, 5, 1 };
W[0] = new double[][] {new double[1],new double[neurone[1]]};
W[1] = new double[][] {new double[neurone[1]],new double[neurone[0]] };
W[2] = new double[][] {new double[neurone[2]],new double [neurone[1]] };
foreach (double[][] array in W)
{
foreach (double[] item in array)
{
for (int i = 0; i < item.GetLength(0); i++)
{
item[i] = 0;
}
}
}
}
// Rest of the class, some other methods here, etc.
}
答案 2 :(得分:0)
您可以使用递归方法。但是,它需要您指定神经元大小(以某种方式)和数组中每个元素的初始值。神经元大小将是内部数组的大小。
this.InitializeJaggedArray(w, 5, 3);
....
private double[][][] w = new double[3][][];
private void InitializeJaggedArray(IList arr, object initializeValue, int neuronSize)
{
for (int i = 0; i < arr.Count; i++)
{
if (arr[i] == null)
{
arr[i] = Activator.CreateInstance(arr.GetType().GetElementType(), new object[] { neuronSize } );
}
if(arr[i] is IList)
{
InitializeJaggedArray(arr[i] as IList, initializeValue, neuronSize);
}
else
{
arr[i] = initializeValue;
}
}
}
这将初始化您提供给它的任何数组。