我正在关注这个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的最后一个元素将是数据列表的大小
答案 0 :(得分:0)
该错误消息是很不言自明的:您正在尝试以高达row_ptr[i + 1]
(这是列表的长度)的for循环访问vec_len
。当您到达了for循环和i = vec_len - 1
的最后一次迭代时,则i + 1 = vec_len
不在列表的范围内(请记住,Python列表是0初始化的)。
为防止发生此错误,您的范围应仅在第二个for循环中上升到vec_len - 1
。