using System.Collections.Generic;
public static void Main()
var originalArray = new byte[100, 100];
for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++)
originalArray[i, j] = (byte)r.Next(256);
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];
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);