¿Por qué numpy tiene una función correspondiente para muchos métodos ndarray?

Algunos ejemplos:

numpy.sum()
ndarray.sum()
numpy.amax()
ndarray.max()
numpy.dot()
ndarray.dot()

... y bastantes más. ¿Es para admitir algún código heredado, o hay una mejor razón para eso? Y, ¿elijo solo en función de cómo se ve mi código, o es una de las dos formas mejor que la otra?

Me imagino que uno podría querernumpy.dot() usarreduce (p.ej.,reduce(numpy.dot, A, B, C, D)) pero no creo que sea tan útil para algo comonumpy.sum().

Respuestas a la pregunta(3)

Su respuesta a la pregunta