Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";加入;四个较小的矩阵一起形成一个较大的矩阵?_C#_Arrays_Join_Matrix_Int - Fatal编程技术网

C# 如何";加入;四个较小的矩阵一起形成一个较大的矩阵?

C# 如何";加入;四个较小的矩阵一起形成一个较大的矩阵?,c#,arrays,join,matrix,int,C#,Arrays,Join,Matrix,Int,在c#中,我有四个10x10整数平方矩阵,我需要通过合并四个较小的矩阵来创建一个20x20平方矩阵 实现这一目标的最佳方式是什么 编辑:这是我的代码 int[] first = myArray.Take(myArray.Length / 2).ToArray(); int[] second = myArray.Skip(myArray.Length / 2).ToArray(); int[,] matrice0 =

在c#中,我有四个10x10整数平方矩阵,我需要通过合并四个较小的矩阵来创建一个20x20平方矩阵

实现这一目标的最佳方式是什么

编辑:这是我的代码

                int[] first = myArray.Take(myArray.Length / 2).ToArray();
            int[] second = myArray.Skip(myArray.Length / 2).ToArray();

            int[,] matrice0 = MatrixCalc(first, first);
            int[,] matrice1 = MatrixCalc(first, second);
            int[,] matrice2 = MatrixCalc(second, first);
            int[,] matrice3 = MatrixCalc(second, second);
            // Need to join these four matrices here like this: [[0 1][2 3]]

快速组合一个简单的不可伸缩解决方案(仅适用于4个矩阵,如果您需要一个可伸缩解决方案,您可以将矩阵视为列表列表并将其连接起来),假设矩阵长度相同。我还没有编译过,所以很抱歉有错误

int[,] joinedMatrice = new int[matrice0.GetLength(0) + matrice1.GetLength(0), matrice0.GetLength(1) + matrice2.GetLength(1)];

    for (int i = 0; i < matrice0.GetLength(0) + matrice1.GetLength(0); i++)
    {
        for (int j = 0; j < matrice0.GetLength(1) + matrice2.GetLength(1); j++)
        {
            int value = 0;
            if (i < matrice0.GetLength(0) && j < matrice0.GetLength(1))
            {
                value = matrice0[i, j];
            }
            else if (i >= matrice0.GetLength(0) && j < matrice0.GetLength(1))
            {
                value = matrice1[i - matrice0.GetLength(0), j];
            }
            else if (i < matrice0.GetLength(0) && j >= matrice0.GetLength(1))
            {
                value = matrice2[i, j - matrice0.GetLength(1)];
            }
            else if (i >= matrice0.GetLength(0) && j >= matrice0.GetLength(1))
            {
                value = matrice3[i - matrice0.GetLength(0), j - matrice0.GetLength(1)];
            }

            joinedMatrice[i, j] = value;
        }

    }
int[,]joinedMatrice=newint[matrice0.GetLength(0)+matrice1.GetLength(0),matrice0.GetLength(1)+matrice2.GetLength(1)];
对于(inti=0;i=matrice0.GetLength(0)和&j=matrice0.GetLength(1))
{
值=矩阵2[i,j-矩阵0.GetLength(1)];
}
else如果(i>=matrice0.GetLength(0)和&j>=matrice0.GetLength(1))
{
值=矩阵3[i-矩阵0.GetLength(0),j-矩阵0.GetLength(1)];
}
joinedMatrice[i,j]=值;
}
}
您可以执行以下操作:

// pre-arrange them in the form you want
List<List<int[,]>> sources = new List<List<int[,]>>() {
    new List<int[,]>() {matrice0, matrice1},
    new List<int[,]>() {matrice2, matrice3}
};

int[,] joint = new int[20, 20];
for (int i = 0; i < joint.GetLength(0); i++) {
    for (int j = 0; j < joint.GetLength(1); j++) {
        // select the matrix corresponding to value (i,j)
        int[,] source = sources[i / matrice0.GetLength(0)][j / matrice0.GetLength(1)];
        // and copy the value
        joint[i, j] = source[i % matrice0.GetLength(0), j % matrice0.GetLength(1)];
    }
}
//以您想要的形式预先安排它们
列表源=新列表(){
新列表(){matrice0,matrice1},
新列表(){matrice2,matrice3}
};
int[,]关节=新的int[20,20];
for(int i=0;i
如何加入他们
[[01][23]
[[02][13]
?@JuliánUrbano
[[01][23]]
您自己尝试的方法是否有任何具体问题?我尝试了一点
数组。请复制
,但我正在寻找更好的解决方案。是否有机会发布您的尝试<就性能和可维护性而言,code>Array.Copy
似乎是这里的最佳选择