Numpy np.multiply vs * -Operator

¿Hay alguna diferencia en el uso

import numpy as np a, b = np.random([1024, 1024]), np.random([1024, 1024]) c = np.multiply(a, b) 

terminado

 c = a * b 

o ¿el * -Operator en arrays numpy simplemente se invalida con np.multiply ?


Edición : esta pregunta está marcada como duplicada porque una pregunta pregunta lo mismo sobre el operador de división ( np.divide() vs / ) y siguieron respuestas similares, pero a menos que se cambie a “aritmética numpy vs. aritmética python” o algo así como de la misma manera, no ayudará a las personas que se preguntan lo mismo que yo (sobre la multiplicación) y no son lo suficientemente “inteligentes” como para asumir una pregunta sobre una operación aritmética relacionada (división) que se generaliza a todas las operaciones aritméticas básicas. Para facilitar la búsqueda de respuestas , abogo por mantener esta pregunta como está.

No hay diferencia. Sin embargo, la función np.multiply puede np.multiply argumentos opcionales adicionales, por lo que es más versátil. Ver los documentos .

Decir que * se sobrescribe con np.multiply no sería muy preciso. En general, * __rmul__ a las llamadas a los métodos __mul__ y __rmul__ en los objetos sobre los que actúa. Por lo tanto, * está más bien “sobrescrito” con np.ndarray.__mul__

diferencias de velocidad – ninguna:

 In [65]: timeit c = np.multiply(a,b) 4.95 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [66]: timeit c = a*b 5.06 ms ± 180 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 

Para matrices más pequeñas podríamos ver diferencias debido a una stack de llamadas diferente, pero con estos, el cálculo real domina el tiempo.

Pero como puede ver en los documentos, np.multiply es un ufunc con acceso a toda la maquinaria que eso implica.

Para los objetos np.matrix , * es producto de matriz, np.multiply es multiplicación de elementos.