如何像计算机科学家一样思考(第9章):我不理解以下内容

1 投票
3 回答
651 浏览
提问于 2025-04-17 00:14

我在理解下面代码中的doctest到底在找什么方面的内容时遇到了困难。

有人能帮我解释得更清楚一点吗?

问题 14

  1. 编写函数row_times_column和matrix_mult:
def row_times_column(m1, row, m2, column):
    """
      >>> row_times_column([[1, 2], [3, 4]], 0, [[5, 6], [7, 8]], 0)
      19
      >>> row_times_column([[1, 2], [3, 4]], 0, [[5, 6], [7, 8]], 1)
      22
      >>> row_times_column([[1, 2], [3, 4]], 1, [[5, 6], [7, 8]], 0)
      43
      >>> row_times_column([[1, 2], [3, 4]], 1, [[5, 6], [7, 8]], 1)
      50
    """
def matrix_mult(m1, m2):
   """
      >>> matrix_mult([[1, 2], [3,  4]], [[5, 6], [7, 8]])
      [[19, 22], [43, 50]]
      >>> matrix_mult([[1, 2, 3], [4,  5, 6]], [[7, 8], [9, 1], [2, 3]])
      [[31, 19], [85, 55]]
      >>> matrix_mult([[7, 8], [9, 1], [2, 3]], [[1, 2, 3], [4, 5, 6]])
      [[39, 54, 69], [13, 23, 33], [14, 19, 24]]
    """

把你新写的函数添加到matrices.py文件中,并确保它能通过上面的doctests。

3 个回答

1

第一个函数叫做 row_times_column,它的作用是把第一个矩阵的第n行和第二个矩阵的第m列相乘。举个例子,在第一个测试中,n = 0m = 0,这意味着我们要把行矩阵 [1, 2] 和列矩阵 [5, 7] 相乘,计算的过程是 1 * 5 + 2 * 7,最后得到的结果是 19,这就是题目中给出的答案。

第二个函数是一个更一般的版本,它的工作是把第一个矩阵和第二个矩阵相乘。你可能需要用到第一个函数。链接的文章解释了如何通过行和列的相乘来实现矩阵的乘法。

3

第一个函数,文档字符串中的第一个例子:从第一个矩阵中取出第零行([1, 2]),然后把它和第二个矩阵的第零列([5, 7])相乘。

1 x 5 + 2 x 7 = 19

第二个函数就是标准的矩阵乘法。你可以用第一个函数来解决这个问题。

3

这个内容是在让你实现一些矩阵相乘的方法。

在第一个方法中,给定一个矩阵,要把第一个矩阵的某一行和第二个矩阵的某一列相乘。第一个例子是:

1 2   times   5 6
3 4           7 8

但我们只需要计算第0行和第0列的乘积,所以结果是

[1 2] x 5 
        7

= 5+14 = 19。其他的计算也是这样...

第二个函数则是要进行完整的矩阵相乘。你可以参考一下这个链接:http://en.wikipedia.org/wiki/Matrix_multiplication

撰写回答