2016-05-17 4 views
1

2D多次元配列の10x10サブアレイを平均化するコードをまとめてストールしました。2D多次元配列のサブアレイ

は、私は100バイト(10×10)それぞれの100個のサブアレイの作成に取り掛かる必要がありますどのように多次元配列

var myArray = new byte[100, 100]; 

を考えます。

多次元のサブ配列に含まれる値インデックスの例を次に示します。これらのサブアレイを考える

  [x1,y1,x2,y2] 
Subarray1[0,0][9,9] 
Subarray2[10,10][19,19] 
Subarray3[20,20][29,29] 

、私はその後、元バイト[100100]から[10,10]バイトを作成するために、サブアレイ値を平均化する必要があります。

これは信じられないほど難しいことではありませんが、4日後に非常に低レベルのコードをデバッグした後、これに固執して新鮮な目に感謝します。

答えて

1

これを参考にしてください。私は使いやすさのためにintを使いました。コードはテストされていません。しかしそのアイデアはそこにあります。

 var rowSize = 100; 
     var colSize = 100; 
     var arr = new int[rowSize, colSize]; 
     var r = new Random(); 
     for (int i = 0; i < rowSize; i++) 
      for (int j = 0; j < colSize; j++) 
       arr[i, j] = r.Next(20); 
     for (var subcol = 0; subcol < colSize/10; subcol++) 
     { 
      for (var subrow = 0; subrow < colSize/10; subrow++) 
      { 
       var startX = subcol*10; 
       var startY = subrow*10; 

       var avg = 0; 

       for (var x=0; x<10; x++) 
        for (var y = 0; y < 10; y++) 
         avg += arr[startX + x, startY + y]; 

       avg /= 10*10; 
       Console.WriteLine(avg); 
      } 
     } 

あなたはあなたのように思えます。次回は、問題にあなたの試みを投稿しようとします。コードを修正する方がよいでしょう。

1

私たちが作成しようとしているサブアレイのインデックスを考えれば、オリジナルの100x100配列の正しい行と列のインデックスを得ることができます。残りはちょうど値をコピーの問題のようになります。

// psuedocode 
// given a subarrayIndex of 0 to 99, these will calculate the correct indices 
rowIndexIn100x100Array = (subarrayIndex/10) * 10 + subArrayRowIndexToPopulate; 
colIndexIn100x100Array = (subarrayIndex % 10) * 10 + subArrayColIndexToPopulate; 

私は上記の機能が正しくインデックスを計算する理由を推測するためにあなたに練習としてそれを残しておきます。上記で

、我々は簡単に値をマッピングすることができる:

var averages = new byte[10, 10]; 
for (int i = 0; i < 10; i++) 
    for (int j = 0; j < 10; j++) 
    { 
     averages[i, j] = (byte)subArrays[(i * 10) + j].Cast<byte>().Average(b => b); 
    } 

Fiddle:我々は、10×10アレイを有する

var subArrays = new List<byte[,]>(); 
for (int subarrayIndex = 0; subarrayIndex < 100; subarrayIndex++) 
{ 
    var subarray = new byte[10, 10]; 
    for (int i = 0; i < 10; i++) 
     for (int j = 0; j < 10; j++) 
     { 
      int rowIndexIn100x100Array = (subarrayIndex/10) * 10 + i; 
      int colIndexIn100x100Array = (subarrayIndex % 10) * 10 + j; 
      subarray[i, j] = originalArray[rowIndexIn100x100Array, colIndexIn100x100Array]; 
     } 
    subArrays.Add(subarray); 
} 

後、平均値を計算するLINQを使用して、些細なことであろう。