将表示神经网络的锯齿状数组转换为表示其神经路径 C# 的二维数组

Posted

技术标签:

【中文标题】将表示神经网络的锯齿状数组转换为表示其神经路径 C# 的二维数组【英文标题】:Converting a Jagged Array that represents a Neural Network to a 2D Array the represents its Neural Pathways C# 【发布时间】:2020-08-01 09:25:06 【问题描述】:

将锯齿状数组“网络”转换为二维数组“路径”的 C# 算法示例是什么?

规则:

    网络总是至少有 3 层。输入、隐藏 1、输出。 没有预定义的最大隐藏层数。 隐藏层可以有不同数量的神经元。

    层中没有预定义的最大神经元数量。

    Int[4][ ] Network         I          H1        H2      O  
    [0] 1,2,3,4                                             
    [1] 1,2,3,4,5,6                    1         1          
    [2] 1,2,3,4,5,6         1          2         2          
    [3] 1,2                 2          3         3       1  
                              3          4         4       2  
                              4          5         5          
                                         6         6          
    
     **Convert this ???? to this ????**                                                         
    
    
    Int[288,4] Paths                 I   H1   H2   O          
    
                              n=1    1   1    1    1          
                              n=2    2   1    1    1          
                              n=3    3   1    1    1          
                              n=4    4   1    1    1          
                              n=5    1   2    1    1          
                              n=6    2   2    1    1          
                              n=7    3   2    1    1          
                              n=8    4   2    1    1          
                              …      …   …    …    …          
                              n=288  4   6    6    2          
    

【问题讨论】:

【参考方案1】:

我能在短时间内做的最好...

 static void Main(string[] args)
 
     int[][] jagged = new int[4][];
     jagged[0] = new int[]  1, 2, 3, 4 ;
     jagged[1] = new int[]  1, 2, 3, 4, 5, 6 ;
     jagged[2] = new int[]  1, 2, 3, 4, 5, 6 ;
     jagged[3] = new int[]  1, 2 ;
     int[,] array2D = Jaggedto2D(jagged);
     for(int i = 0; i < array2D.GetLength(0); i++)
     
         Console.WriteLine(String.Format("n=0  1 2 3 4", i + 1, array2D[i, 0], array2D[i, 1], array2D[i, 2], array2D[i, 3]));
     
 
 private static int Fill(int[,] array2D, int k, int[] indices, int[][] jagged)
 
      if(indices.Length == array2D.GetLength(1))
      
          for(int i = 0; i < indices.Length; ++i)
          
                array2D[k, i] = jagged[i][indices[i]];
          
          k++;
      
      else
      
           int j = indices.Length;
           int[] indices1 = new int[j + 1];
           Array.Copy(indices, indices1, j);
           for(int l = 0; l < jagged[j].Length; ++l)
           
               indices1[j] = l;
               k = Fill(array2D, k, indices1, jagged);
           
       
       return k;
  

  private static int[,] Jaggedto2D(int[][] jagged)
  
       int width = jagged.Length;
       int length = 1;
       for (int i = 0; i < width; i++)
            length *= jagged[i].Length;
       int[,] array2D = new int[length, width];
       int k = 0;
       Fill(array2D, k, new int[0], jagged);
       return array2D;
   

生产...

n=1  1 1 1 1
n=2  1 1 1 2
n=3  1 1 2 1
n=4  1 1 2 2
n=5  1 1 3 1
n=6  1 1 3 2
n=7  1 1 4 1
n=8  1 1 4 2
n=9  1 1 5 1
n=10  1 1 5 2
n=11  1 1 6 1
n=12  1 1 6 2
n=13  1 2 1 1
n=14  1 2 1 2
n=15  1 2 2 1
n=16  1 2 2 2
n=17  1 2 3 1
n=18  1 2 3 2
n=19  1 2 4 1
n=20  1 2 4 2
n=21  1 2 5 1
n=22  1 2 5 2
n=23  1 2 6 1
n=24  1 2 6 2
n=25  1 3 1 1
n=26  1 3 1 2
n=27  1 3 2 1
n=28  1 3 2 2
n=29  1 3 3 1
n=30  1 3 3 2
n=31  1 3 4 1
n=32  1 3 4 2
n=33  1 3 5 1
n=34  1 3 5 2
n=35  1 3 6 1
n=36  1 3 6 2
n=37  1 4 1 1
n=38  1 4 1 2
n=39  1 4 2 1
n=40  1 4 2 2
n=41  1 4 3 1
n=42  1 4 3 2
n=43  1 4 4 1
n=44  1 4 4 2
n=45  1 4 5 1
n=46  1 4 5 2
n=47  1 4 6 1
n=48  1 4 6 2
n=49  1 5 1 1
n=50  1 5 1 2
n=51  1 5 2 1
n=52  1 5 2 2
n=53  1 5 3 1
n=54  1 5 3 2
n=55  1 5 4 1
n=56  1 5 4 2
n=57  1 5 5 1
n=58  1 5 5 2
n=59  1 5 6 1
n=60  1 5 6 2
n=61  1 6 1 1
n=62  1 6 1 2
n=63  1 6 2 1
n=64  1 6 2 2
n=65  1 6 3 1
n=66  1 6 3 2
n=67  1 6 4 1
n=68  1 6 4 2
n=69  1 6 5 1
n=70  1 6 5 2
n=71  1 6 6 1
n=72  1 6 6 2
n=73  2 1 1 1
n=74  2 1 1 2
n=75  2 1 2 1
n=76  2 1 2 2
n=77  2 1 3 1
n=78  2 1 3 2
n=79  2 1 4 1
n=80  2 1 4 2
n=81  2 1 5 1
n=82  2 1 5 2
n=83  2 1 6 1
n=84  2 1 6 2
n=85  2 2 1 1
n=86  2 2 1 2
n=87  2 2 2 1
n=88  2 2 2 2
n=89  2 2 3 1
n=90  2 2 3 2
n=91  2 2 4 1
n=92  2 2 4 2
n=93  2 2 5 1
n=94  2 2 5 2
n=95  2 2 6 1
n=96  2 2 6 2
n=97  2 3 1 1
n=98  2 3 1 2
n=99  2 3 2 1
n=100  2 3 2 2
n=101  2 3 3 1
n=102  2 3 3 2
n=103  2 3 4 1
n=104  2 3 4 2
n=105  2 3 5 1
n=106  2 3 5 2
n=107  2 3 6 1
n=108  2 3 6 2
n=109  2 4 1 1
n=110  2 4 1 2
n=111  2 4 2 1
n=112  2 4 2 2
n=113  2 4 3 1
n=114  2 4 3 2
n=115  2 4 4 1
n=116  2 4 4 2
n=117  2 4 5 1
n=118  2 4 5 2
n=119  2 4 6 1
n=120  2 4 6 2
n=121  2 5 1 1
n=122  2 5 1 2
n=123  2 5 2 1
n=124  2 5 2 2
n=125  2 5 3 1
n=126  2 5 3 2
n=127  2 5 4 1
n=128  2 5 4 2
n=129  2 5 5 1
n=130  2 5 5 2
n=131  2 5 6 1
n=132  2 5 6 2
n=133  2 6 1 1
n=134  2 6 1 2
n=135  2 6 2 1
n=136  2 6 2 2
n=137  2 6 3 1
n=138  2 6 3 2
n=139  2 6 4 1
n=140  2 6 4 2
n=141  2 6 5 1
n=142  2 6 5 2
n=143  2 6 6 1
n=144  2 6 6 2
n=145  3 1 1 1
n=146  3 1 1 2
n=147  3 1 2 1
n=148  3 1 2 2
n=149  3 1 3 1
n=150  3 1 3 2
n=151  3 1 4 1
n=152  3 1 4 2
n=153  3 1 5 1
n=154  3 1 5 2
n=155  3 1 6 1
n=156  3 1 6 2
n=157  3 2 1 1
n=158  3 2 1 2
n=159  3 2 2 1
n=160  3 2 2 2
n=161  3 2 3 1
n=162  3 2 3 2
n=163  3 2 4 1
n=164  3 2 4 2
n=165  3 2 5 1
n=166  3 2 5 2
n=167  3 2 6 1
n=168  3 2 6 2
n=169  3 3 1 1
n=170  3 3 1 2
n=171  3 3 2 1
n=172  3 3 2 2
n=173  3 3 3 1
n=174  3 3 3 2
n=175  3 3 4 1
n=176  3 3 4 2
n=177  3 3 5 1
n=178  3 3 5 2
n=179  3 3 6 1
n=180  3 3 6 2
n=181  3 4 1 1
n=182  3 4 1 2
n=183  3 4 2 1
n=184  3 4 2 2
n=185  3 4 3 1
n=186  3 4 3 2
n=187  3 4 4 1
n=188  3 4 4 2
n=189  3 4 5 1
n=190  3 4 5 2
n=191  3 4 6 1
n=192  3 4 6 2
n=193  3 5 1 1
n=194  3 5 1 2
n=195  3 5 2 1
n=196  3 5 2 2
n=197  3 5 3 1
n=198  3 5 3 2
n=199  3 5 4 1
n=200  3 5 4 2
n=201  3 5 5 1
n=202  3 5 5 2
n=203  3 5 6 1
n=204  3 5 6 2
n=205  3 6 1 1
n=206  3 6 1 2
n=207  3 6 2 1
n=208  3 6 2 2
n=209  3 6 3 1
n=210  3 6 3 2
n=211  3 6 4 1
n=212  3 6 4 2
n=213  3 6 5 1
n=214  3 6 5 2
n=215  3 6 6 1
n=216  3 6 6 2
n=217  4 1 1 1
n=218  4 1 1 2
n=219  4 1 2 1
n=220  4 1 2 2
n=221  4 1 3 1
n=222  4 1 3 2
n=223  4 1 4 1
n=224  4 1 4 2
n=225  4 1 5 1
n=226  4 1 5 2
n=227  4 1 6 1
n=228  4 1 6 2
n=229  4 2 1 1
n=230  4 2 1 2
n=231  4 2 2 1
n=232  4 2 2 2
n=233  4 2 3 1
n=234  4 2 3 2
n=235  4 2 4 1
n=236  4 2 4 2
n=237  4 2 5 1
n=238  4 2 5 2
n=239  4 2 6 1
n=240  4 2 6 2
n=241  4 3 1 1
n=242  4 3 1 2
n=243  4 3 2 1
n=244  4 3 2 2
n=245  4 3 3 1
n=246  4 3 3 2
n=247  4 3 4 1
n=248  4 3 4 2
n=249  4 3 5 1
n=250  4 3 5 2
n=251  4 3 6 1
n=252  4 3 6 2
n=253  4 4 1 1
n=254  4 4 1 2
n=255  4 4 2 1
n=256  4 4 2 2
n=257  4 4 3 1
n=258  4 4 3 2
n=259  4 4 4 1
n=260  4 4 4 2
n=261  4 4 5 1
n=262  4 4 5 2
n=263  4 4 6 1
n=264  4 4 6 2
n=265  4 5 1 1
n=266  4 5 1 2
n=267  4 5 2 1
n=268  4 5 2 2
n=269  4 5 3 1
n=270  4 5 3 2
n=271  4 5 4 1
n=272  4 5 4 2
n=273  4 5 5 1
n=274  4 5 5 2
n=275  4 5 6 1
n=276  4 5 6 2
n=277  4 6 1 1
n=278  4 6 1 2
n=279  4 6 2 1
n=280  4 6 2 2
n=281  4 6 3 1
n=282  4 6 3 2
n=283  4 6 4 1
n=284  4 6 4 2
n=285  4 6 5 1
n=286  4 6 5 2
n=287  4 6 6 1
n=288  4 6 6 2

【讨论】:

以上是关于将表示神经网络的锯齿状数组转换为表示其神经路径 C# 的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中从锯齿状数组转换为双指针

将String转换为其表示的路径画到屏幕上

将表示 UCHAR 数组的 json 字符串响应转换为字节数组

CGP与演化神经网络

将加速的 A 数组表示转换为 repa 的 U 数组表示

张量和卷积神经网络