将CSR矩阵多重化为向量

时间:2019-04-21 17:48:51

标签: python matrix-multiplication

我正在关注这个stackoverflow帖子on csr matrix multiplication to a vector 并在python中实现它,并导致列表超出范围错误。

这是我的代码:

c

请帮助我解决问题。

输出应为:[22 14 14 0 8]

错误:

def MatrixMultiplication(data,row_ptr,col_ptr,vec):
  ResultMatrix =[]
  vec_len = len(vec)
  for i in range(0,vec_len):
    ResultMatrix.insert(i,0)
  for i in range(0,vec_len):
    start, end = row_ptr[i], row_ptr[i + 1]
    for k in range(start, end):
      ResultMatrix[i] = ResultMatrix[i]+data[k]*vec[col_ptr[k]]
  return ResultMatrix

data = [2, 4, 7, 1, 3, 2]
row_ptr =  [2,3 ,5, 5 ,6]
col_ptr = [1 ,3, 4, 0, 3, 3]
vec = [2,3, 5, 4, 2]

MatrixMultiplication(data,row_ptr,col_ptr,vec)

仅供参考:

row_ptr的最后一个元素将是数据列表的大小

1 个答案:

答案 0 :(得分:0)

该错误消息是很不言自明的:您正在尝试以高达row_ptr[i + 1](这是列表的长度)的for循环访问vec_len。当您到达了for循环和i = vec_len - 1的最后一次迭代时,则i + 1 = vec_len不在列表的范围内(请记住,Python列表是0初始化的)。

为防止发生此错误,您的范围应仅在第二个for循环中上升到vec_len - 1