矩阵乘法Python与Swift中的不同输出

时间:2018-03-31 07:18:53

标签: python swift matrix multiplication

我在swift和python中编写矩阵乘法代码但两个代码都生成不同的输出。 我也用C ++编写这段代码,但它生成与python相同的输出,我一次又一次地检查了swift代码但是没有区别 我试图将这两个矩阵相乘

Matrix A

1 0 1
0 0 0
1 0 1

Matrix B

0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 0
0 2 3 4 5 6 7 8 9 0
0 3 4 5 6 7 8 9 5 0
0 4 5 6 7 8 9 3 4 0
0 4 5 6 7 8 9 2 3 0
0 5 6 7 8 9 0 4 6 0
0 6 7 8 9 1 2 3 8 0
0 7 8 9 1 2 3 0 5 0
0 8 9 2 4 5 6 4 8 0
0 0 0 0 0 0 0 0 0 0

这是我的Python代码

row,col = 8,9 
result = [[0 for x in range(row)] for y in range(col)]
row,col=0,0
for matrixB_Row in range(0,9):
    for matrixB_Col in range(0,8):
        for matrixA_Row in range(0,3):
            for i in range(0,3):
                for matrixA_Col in range(0,3):
                    result[row][col] = result[row][col]+(matrixA[matrixA_Row][matrixA_Col]*matrixA[matrixB_Row][matrixB_Col])
                    matrixA_Col+=1
                    matrixB_Row+=1
                i+=1
                matrixB_Col+=1
                matrixB_Row = matrixB_Row-3
            matrixB_Col = matrixB_Col-3
            matrixA_Row+=1
        col+=1
        matrixB_Col+=1
    row+=1
    col=0
    matrixB_Row=+1
    matrixB_Col=0

这是我的快捷代码

var Row = 0, Col = 0, MatrixB_Col = 0, MatrixB_Row = 0, MatrixA_Col = 0, MatrixA_Row = 0, i = 0
        var result = [[Int]](repeating: [Int](repeating: 0, count: 8), count: 9)
        while MatrixB_Row < 9
        {
            MatrixB_Col = 0
            while MatrixB_Col < 8{
                MatrixA_Row = 0
                while MatrixA_Row < 3 {
                    i = 0
                    while i < 3 {
                        MatrixA_Col = 0
                        while MatrixA_Col < 3{
                            result[Row][Col] += (matrixA[MatrixA_Row][MatrixA_Col] * matrixB[MatrixB_Row][MatrixB_Col]);
                            MatrixA_Col+=1
                            MatrixB_Row+=1
                        }
                        i+=1
                        MatrixB_Col+=1
                        MatrixB_Row = MatrixB_Row - 3
                    }
                    MatrixA_Row+=1
                    MatrixB_Col = MatrixB_Col - 3
                }
                MatrixB_Col+=1
                Col+=1
            }
            Row+=1
            Col=0
            MatrixB_Row+=1
            MatrixB_Col = 0
        }

2 个答案:

答案 0 :(得分:2)

你的python代码中的乘法:

result[row][col] = result[row][col]+(matrixA[matrixA_Row][matrixA_Col]*matrixA[matrixB_Row][matrixB_Col])

在这里,你只使用矩阵A中的元素进行乘法。

快速代码中的乘法:

result[Row][Col] += (matrixA[MatrixA_Row][MatrixA_Col] * matrixB[MatrixB_Row][MatrixB_Col]);

在这里你同时使用矩阵A和矩阵B. 这就是结果不同的原因 - 你的python代码中有错误。

答案 1 :(得分:0)