COO稀疏矩陣相乘,可以發現0元素都不會被乘到
(%i13)
N:apply(max,Row)$
result:create_list(0,i,1,N)$
for i:1 thru length(Val) do
(print("result[",Row[ i ],"]再加上",Val[ i ],"*",b[Col[ i ]]),
result[Row[ i ]]:result[Row[ i ]]+Val[ i ]*b[Col[ i ]]
)$
result[1]再加上1*3
result[2]再加上1*2
result[2]再加上1*4
result[3]再加上1*1
result[3]再加上1*4
result[4]再加上1*1
CSR稀疏矩陣相乘,可以發現0元素都不會被乘到
(%i13)
N:length(RowPtr)-1$
result:create_list(0,i,1,N)$
for i:1 thru length(RowPtr)-1 do
(for j:RowPtr[ i ] thru RowPtr[i+1]-1 do
(print("result[",i,"]再加上",Val[j],"*",b[Col[j]]),
result[ i ]:result[ i ]+Val[j]*b[Col[j]]
)
)$
result[1]再加上1*3
result[2]再加上1*2
result[2]再加上1*4
result[3]再加上1*1
result[3]再加上1*4
result[4]再加上1*1
CSC稀疏矩陣相乘,可以發現0元素都不會被乘到
(%i12)
N:length(ColPtr)-1$
result:create_list(0,i,1,N)$
for i:1 thru length(ColPtr)-1 do
(for j:ColPtr[ i ] thru ColPtr[i+1]-1 do
(print("result[",i,"]再加上",b[Row[j]],"*",Val[j]),
result[ i ]:result[ i ]+b[Row[j]]*Val[j]
)
)$
result[1]再加上3*1
result[1]再加上4*1
result[2]再加上2*1
result[3]再加上1*1
result[4]再加上2*1
result[4]再加上3*1
COO稀疏矩陣相乘
(%i5)
COOmul(Col,Row,Val,b):=block
([N,result],
N:apply(max,Row),
result:create_list(0,i,1,N),
for i:1 thru length(Val) do
(result[Row[ i ]]:result[Row[ i ]]+Val[ i ]*b[Col[ i ]]
),
return(result)
)$
CSR稀疏矩陣相乘
(%i10)
CSRmul(Col,RowPtr,Val,b):=block
([N,result],
N:length(RowPtr)-1,
result:create_list(0,i,1,N),
for i:1 thru length(RowPtr)-1 do
(for j:RowPtr[ i ] thru RowPtr[i+1]-1 do
(result[ i ]:result[ i ]+Val[j]*b[Col[j]]
)
),
return(result)
)$
CSC稀疏矩陣相乘
(%i15)
CSCmul(b,ColPtr,Row,Val):=block
([N,result],
N:length(ColPtr)-1,
result:create_list(0,i,1,N),
for i:1 thru length(ColPtr)-1 do
(for j:ColPtr[ i ] thru ColPtr[i+1]-1 do
(result[ i ]:result[ i ]+b[Row[j]]*Val[j]
)
),
return(result)
)$
CSR稀疏矩陣相乘
(%i6)
CSRmul(Col,RowPtr,Val,b):=block
([N,result],
N:length(RowPtr)-1,
result:create_list(0,i,1,N),
for i:1 thru length(RowPtr)-1 do
(for j:RowPtr[ i ] thru RowPtr[i+1]-1 do
(result[ i ]:result[ i ]+Val[j]*b[Col[j]]
)
),
return(result)
)$