稀疏矩阵相乘

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]

 

转载于:https://www.cnblogs.com/liqiniuniu/p/10598840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值