如何从许多较小的2d数组中构建一个大的2d数组

时间:2016-03-02 17:54:52

标签: c#

我正在努力寻找

512 x 512 (262144 elements)

我目前有一个

List<double[,]> data;

尺寸为:

4096 x [8 , 8] (262144 elements)

我正在努力的2D阵列是 square

List<List<float>> newList = new List<List<float>(); //working towards

我尝试了以下方面的内容:

for (int i = 0; i < Math.Sqrt(data.Count); i++ ) {
    List<float> row = new List<float>();
    foreach (double[,] block in data) {
        for (int j = 0; j < 8; j++) {
            row.Add(block[i,j]); //i clearly out of range
        }
    }
    newList.Add(row);
}

我试图在那里做的是强行蛮力并添加每一行(长度为8),然后将大行添加到newList。

1 个答案:

答案 0 :(得分:0)

我相信你可以通过以下方式做到这一点

var newList = new List<List<float>>();

for (int i = 0; i < 512; i++)
{
    var innerList = new List<float>();
    for (int j = 0; j < 512; j++)
    {
        int x =(i/8)*64 + (j/8);
        int y = i % 8;
        int z = j % 8;
        innerList.Add(data[x][y,z]);
    }

    newList.Add(innerList);
}

基本上你有64x64的8x8块。因此,较大的512x512结构的(i,j)坐标以下列方式转换。首先确定8x8块,你必须通过将i和j除以块的大小(8)来计算64x64块结构的行和列,然后将行(i / 8)乘以连续阻塞(64)并添加列(j / 8)。对于y和z,它更简单,因为你知道它只是i和j的余数除以8(i%8)和(j%8)。