def naive(A, B):
    mask = A != 0
out = A.dot(B).tolil()
out[mask] = A[mask]
return out.tocsr()

def proposed(A, B):
    R, C = (A != 0).dot(B != 0).nonzero()
mask = np.asarray(A[R, C] == 0).ravel()
R, C = R[mask], C[mask]
out = A.copy()
out[R, C] = A[R].multiply(B[:, (C)].T).sum(1).ravel()
return out
Скалярный продукт двух разреженных матриц, влияющий только на нулевые значения