问题描述
我正在尝试创建一个由 6 个数组组成的数组,每个数组包含 4 个数组,这 4 个数组中的每一个都具有不同的形状。 就像下面的表格:
[[array([[1,2,3,4,6,5],[5,7,[6,5,[4,]),array([[9,9,9],[9,6],[3,6]]),array([[6],[7],[7]]),array([[7,8,8]])],[[array([[1,8]])]]
..........
有人可以帮我解决这个问题吗?
int populationSize = 6;
double[][][][] population = new double[populationSize][][][];
int value = 3;
for (int i = 0; i < populationSize; i++)
{
population[i] = new double[4][][];
for (int j = 0; j < 4; j++)
{
const int rows = 7,cols = 6;
population[i][j] = new double[rows][];
for (int k = 0; k < rows; k++)
{
population[i][j][k] = new double[cols];
for (int m = 0; m < cols; m++)
{
population[i][j][k][m] = value;
}
}
}
}
解决方法
const int rows = 7,cols = 6;
population[j][j] = new double[5][];
for (int k = 0; k < rows; k++)
您对 population[j][j]
使用相同的索引,这可能是不正确的。
您还指定了 7 行,但创建了一个大小为 5 的矩阵。这可能是不正确的。
正如 Scopperloit 指出的那样,您可能想要:
const int rows = 7,cols = 6;
population[i][j] = new double[rows][];
for (int k = 0; k < rows; k++)
调试问题时的总体情况。在调试器中运行代码并根据您的预期检查值。索引超出范围的异常通常很容易调试:
- 什么是索引?
- 数组的长度是多少?
- 索引或数组长度是否不正确?
我设法解决了我的问题。 此函数根据另一个数组创建不同形状数组的数组,并用随机正态标准分布值填充它:
int[,] netshape = new int[,] { { 3,4},{ 4,5},1 },{ 1,4} }; // The shape of the network
public double[][][][] CreateNetwork(int[,] netshape,int populationSize )
{
normal = new MathNet.Numerics.Distributions.Normal(0,1);// Generate random normal standard distribution
int rows,cols ;
double[][][][] population = new double[populationSize][][][];
for (int i = 0; i < populationSize; i++)
{
population[i] = new double[4][][];
for (int j = 0; j < 4; j++)
{
rows = netshape[j,0];
cols = netshape[j,1];
population[i][j] = new double[rows][];
for (int k = 0; k < rows; k++)
{
population[i][j][k] = new double[cols];
for (int m = 0; m < cols; m++)
{
population[i][j][k][m] = normal.Sample(); ;
}
}
}
}
return population;
}