def dot(A, b): """Dot product between a 2D matrix and a 1D vector""" return [sum([aij * bj for aij, bj in zip(ai, b)]) for ai in A] def allclose(a, b, tol=1e-7): """Are all elements of a vector close to one another""" return all([abs(ai - bi) < tol for ai, bi in zip(a, b)])