A*B,将A转为行向量,B转为列向量。
A的列数 == B的行数 == k
然后同步遍历A、B
对于A[k]中的元素Aobj、B[k]中的元素Bobj,满足Aobj的列 == Bobj的行,所以Aobj * Bobj 从属于 ans[Aobj的行][Bobj的列],即ans[Aobj的行][Bobj的列] += Aobj * Bobj
1 class Solution: 2 """ 3 @param A: a sparse matrix 4 @param B: a sparse matrix 5 @return: the result of A * B 6 """ 7 def multiply(self, A, B): 8 # write your code here 9 if not A or not B: 10 return None 11 ans = [[0 for j in range(len(B[0]))] for i in range(len(A))] 12 A, B = self.convert_to_row_vector(A), self.convert_to_col_vector(B) 13 self.multiply_two_vector(A, B, ans) 14 return ans 15 16 def convert_to_row_vector(self, matrix): 17 vector = [] 18 for col in range(len(matrix[0])): 19 obj = [] 20 for row in range(len(matrix)): 21 if matrix[row][col] == 0: 22 continue 23 obj.append((row, col, matrix[row][col])) 24 vector.append(obj) 25 return vector 26 27 def convert_to_col_vector(self, matrix): 28 vector = [] 29 for row in range(len(matrix)): 30 obj = [] 31 for col in range(len(matrix[0])): 32 if matrix[row][col] == 0: 33 continue 34 obj.append((row, col, matrix[row][col])) 35 vector.append(obj) 36 return vector 37 38 def multiply_two_vector(self, row_vector, col_vector, ans): 39 for k in range(len(row_vector)): 40 for row_obj in row_vector[k]: 41 for col_obj in col_vector[k]: 42 ans[row_obj[0]][col_obj[1]] += row_obj[2] * col_obj[2]