C# 如何";加入;四个较小的矩阵一起形成一个较大的矩阵?
在c#中,我有四个10x10整数平方矩阵,我需要通过合并四个较小的矩阵来创建一个20x20平方矩阵 实现这一目标的最佳方式是什么 编辑:这是我的代码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 =
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
似乎是这里的最佳选择