如何乘以二维数组又称矩阵

时间:2016-11-23 19:56:41

标签: c# arrays dimensional

我想知道如何将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();

                }
            }
        }

1 个答案:

答案 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   ..