如何像计算机科学家一样思考(第9章):我不理解以下内容
我在理解下面代码中的doctest到底在找什么方面的内容时遇到了困难。
有人能帮我解释得更清楚一点吗?
- 编写函数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 = 0
和 m = 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