我想知道如何将2D数组(矩阵)相乘并将它们显示为矩阵。
当前输出
1 1 1
1 1 1
1 1 1
这不是正确的结果。
代码如下:
static void Main(string[] args)
{
int[,] metrix1 = new int[3, 3] { { 2, 0, 2 }, { 0, 1, 2 }, { 1, 2, 1 } };
int[,] metrix2 = new int[3, 3] { { 1, 1, 1 }, { 0, 1, 0 }, { 0, 0, 1 } };
int[,] result = new int[3, 3];
int m1 =0;
int m2 =0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
m1 = metrix1[i, j];
}
}
// metrix 2
for (int y = 0; y < 3; y++)
{
for (int z = 0; z < 3; z++)
{
m2 = metrix2[y, z];
}
}
//m
for (int a = 0; a < 3; a++)
{
for (int b = 0; b < 3; b++)
{
result[a, b] = m1 *m2;
Console.Write(result[a, b] );
}Console.WriteLine();
}Console.ReadLine();
}
}
}
答案 0 :(得分:0)
你正在接近这个错误。
for (int y = 0; y < 3; y++)
{
for (int z = 0; z < 3; z++)
{
m2 = metrix2[y, z];
}
}
在此之后,m2将包含数组的右下角值(matrix[2, 2]
)。你为了乘法而一遍又一遍地重复相同的值。您需要将所有这些放在一个for
循环中。
另外,这不是进行矩阵乘法的正确方法。首先,您的代码仅适用于3x3矩阵;你不仅可以有其他尺寸的矩阵(4x4,5x5等),矩阵甚至不必是正方形就能够乘以它们(只要一列的数量等于行数)另一个)。即使它们 都是3x3矩阵,计算仍然是错误的。 Wikipedia有一些很好的例子说明了正确的方法。
2 0 2 1 1 1 (2*1)+(0*0)+(2*0) (2*1)+(0*1)+(2*0) ...
0 1 2 x 0 1 0 = (0*1)+(1*0)+(2*0) (0*1)(1*1)(2*0) ...
1 2 1 0 0 1 ..