如何像计算机科学家一样思考(第9章):我不明白以下几点

时间:2011-08-24 00:06:18

标签: python

我发现下面的代码中的doctest正是在函数中找到了什么。

有人可以让我更清楚吗?

Question 14

  
      
  1. 编写函数row_times_column和matrix_mult:
  2.   
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 个答案:

答案 0 :(得分:3)

它要求你实现一些矩阵乘法方法。

在第一个中,给定一个矩阵,将m1的行乘以m2的列。给出的第一个是:

1 2   times   5 6
3 4           7 8

但是我们只想要第0行col 0,所以它将是

[1 2] x 5 
        7

= 5 + 14 = 19.等等其他人......

第二个函数想要一个完整的矩阵乘法。见http://en.wikipedia.org/wiki/Matrix_multiplication

答案 1 :(得分:3)

第一个函数,docstring中的第一个示例:从第一个矩阵([1, 2])中取第0行并将其乘以第二个矩阵的第0列([5, 7]

1 x 5 + 2 x 7 = 19

第二个功能只是标准matrix multiplication。您可以使用第一个函数来回答此问题。

答案 2 :(得分:1)

第一个函数row_times_column将第一个矩阵的第n行乘以第二个矩阵的第m列。在第一个doctest中,例如n = 0m = 0,我们将行矩阵[1, 2]乘以列矩阵[5, 7],得到1 * 5 + 2 * 7,它是相等的到指定的19

第二个函数是泛化,第二个函数必须multiply第一个矩阵。您可能应该使用第一个函数。链接的文章展示了如何从逐列乘法的组合中获得矩阵乘法。