📜  门| GATE CS 2019 |问题 20(1)

📅  最后修改于: 2023-12-03 15:28:38.401000             🧑  作者: Mango

GATE CS 2019 | 问题 20

这是一个 GATE 计算机科学考试中的考题,题目是关于矩阵的转置和乘法的。以下是问题的简述:

给定两个矩阵 M1 和 M2,由整数组成的 n1 × n2 和 n2 × n3。现在,你需要编写一个程序,以此对两个矩阵进行矩阵乘法运算,然后对结果矩阵进行一次转置。你需要输出最终结果矩阵的所有元素。

例如,设定一个 M1 矩阵为:

| 1 2 3 | | - - - | | 4 5 6 | | 7 8 9 |

和一个 M2 矩阵为:

| 5 6 | | - - | | 7 8 | | 9 1 |

则他们的乘积矩阵为:

| 46 20 | | -- -- | | 97 56 | | 148 92 |

将这个矩阵进行转置后得到:

| 46 97 148 | | -- -- -- | | 20 56 92 |

这个矩阵就是我们程序的最终输出结果。

下面是一个使用 Python 编写的解法,其中假设 M1 和 M2 在程序中已经定义好了。

def multiply_transpose(M1, M2):
    n1, n2 = len(M1), len(M1[0])
    n3 = len(M2[0])
    # 创建一个与结果矩阵 M1*M2 相同大小的矩阵 transpose_result
    transpose_result = [[0 for j in range(n1)] for i in range(n3)]
    # 计算 M1*M2 的结果,存储在 result 矩阵中
    result = [[0 for j in range(n3)] for i in range(n1)]
    for i in range(n1):
        for j in range(n2):
            for k in range(n3):
                result[i][k] += M1[i][j] * M2[j][k]
    # 计算结果矩阵的转置,存储在 transpose_result 矩阵中
    for i in range(n3):
        for j in range(n1):
            transpose_result[i][j] = result[j][i]
    # 返回转置后的结果矩阵
    return transpose_result

# 输出结果
for row in multiply_transpose(M1, M2):
    print(' '.join(map(str, row)))

上述代码定义了一个名为 multiply_transpose 的函数,它接受两个矩阵作为参数,返回它们的矩阵乘积并转置后的结果矩阵。

下面是代码的解释:

def multiply_transpose(M1, M2):
    # 获取矩阵 M1 和 M2 的行数和列数
    n1, n2 = len(M1), len(M1[0])
    n3 = len(M2[0])

    # 创建一个与结果矩阵 M1*M2 相同大小的矩阵 transpose_result
    transpose_result = [[0 for j in range(n1)] for i in range(n3)]

    # 计算 M1*M2 的结果,存储在 result 矩阵中
    result = [[0 for j in range(n3)] for i in range(n1)]
    for i in range(n1):
        for j in range(n2):
            for k in range(n3):
                result[i][k] += M1[i][j] * M2[j][k]

    # 计算结果矩阵的转置,存储在 transpose_result 矩阵中
    for i in range(n3):
        for j in range(n1):
            transpose_result[i][j] = result[j][i]

    # 返回转置后的结果矩阵
    return transpose_result

函数首先获取了两个矩阵的行数和列数,然后创建了一个新的与结果矩阵 M1×M2 相同大小的矩阵 transpose_result

接下来,函数使用三层循环计算出矩阵乘积的结果,并将其存储在一个名为 result 的新矩阵中。

最后,函数再次使用两层循环,将 result 矩阵的转置存储在 transpose_result 矩阵中,并将其返回。

# 输出结果
for row in multiply_transpose(M1, M2):
    print(' '.join(map(str, row)))

这段代码用于输出结果。它对 multiply_transpose 函数的返回值进行迭代,并将每一行的元素转换为字符串,然后用空格拼接起来并打印出来。