numpy.dot
:
For 2-D arrays it is equivalent to matrix multiplication, and for 1-D arrays to inner product of vectors (without complex conjugation). For N dimensions it is a sum product over the last axis of a and the second-to-last of b:
numpy.inner
:
Ordinary inner product of vectors for 1-D arrays (without complex conjugation), in higher dimensions a sum product over the last axes.
(. Énfasis mío)
Como ejemplo, considere este ejemplo con matrices 2D:
>>> a=np.array([[1,2],[3,4]])
>>> b=np.array([[11,12],[13,14]])
>>> np.dot(a,b)
array([[37, 40],
[85, 92]])
>>> np.inner(a,b)
array([[35, 41],
[81, 95]])
Por lo tanto, el que debe usar es el que proporciona el comportamiento correcto para su aplicación.
pruebas de rendimiento
(Nótese que estoy probando sólo el caso 1D, ya que es la única situación en la que .dot
y .inner
dan el mismo resultado.)
>>> import timeit
>>> setup = 'import numpy as np; a=np.random.random(1000); b = np.random.random(1000)'
>>> [timeit.timeit('np.dot(a,b)',setup,number=1000000) for _ in range(3)]
[2.6920320987701416, 2.676928997039795, 2.633111000061035]
>>> [timeit.timeit('np.inner(a,b)',setup,number=1000000) for _ in range(3)]
[2.588860034942627, 2.5845699310302734, 2.6556360721588135]
Así tal vez .inner
es más rápido, pero mi máquina está bastante cargada en este momento, por lo que los tiempos no son consistentes ni son necesariamente muy precisos.
@MillaWell, son diferentes incluso para matrices 2D: son solo las mismas en 1D. No conozco ninguna diferencia de rendimiento, hay dos formas de probar esto: [leer la fuente] (https://github.com/numpy/numpy/blob/master/numpy/core/blasdot/_dotblas.c) (no es fácil) o hacer algunos perfiles con 'timeit' (mucho más fácil). – huon
Creo que, en general, entendí todo. Por ejemplo, en su ejemplo, calcula el primer valor de '.dot' como (1 * 11 + 2 * 13). ¿Cómo calcularías el primer valor de tu ejemplo de '.inner'? –
@MillaWell, tienes razón. Deje 'c = np.dot (a, b)' y 'd = np.inner (a, b)' luego 'c [i, j] == sum (a [i ,:] * b [:, j ]) 'y' d [i, j] == suma (a [i ,:] * b [j,:]) '. – huon