创建一个由不同形状的数组组成的数组

问题描述

我正在尝试创建一个由 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++)

调试问题时的总体情况。在调试器中运行代码并根据您的预期检查值。索引超出范围的异常通常很容易调试:

  1. 什么是索引?
  2. 数组的长度是多少?
  3. 索引或数组长度是否不正确?
,

我设法解决了我的问题。 此函数根据另一个数组创建不同形状数组的数组,并用随机正态标准分布值填充它:

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;
    }