per sapere in quali Moduli np.inner
e np.sum
sono implementate digito
>>> np.inner.__module__
'numpy.core.multiarray'
>>> np.sum.__module__
'numpy.core.fromnumeric'
>>> np.__file__
'/Users/uweschmitt/venv_so/lib/python3.5/site-packages/numpy/__init__.py'
Se si controlla i file effettivi, si può vedere che numpy.core.multiarray
è un modulo puro C mentre numpy.core.fromnumeric
primo fa alcuni controlli e le conversioni in Python prima di una seconda funzione Python e poi viene chiamata una pura implementazione C per la sommatoria effettiva.
Ho il sospetto che questo sovraccarico dell'interprete Python spieghi le differenze temporali osservate.
per dimostrare la mia ipotesi corro la sincronizzazione con un array più grande e ottenere
In [8]: a = np.random.random(1000000)
In [9]: %timeit np.inner(a, a)
1000 loops, best of 3: 673 µs per loop
In [10]: %timeit np.sum(a)
1000 loops, best of 3: 584 µs per loop
Ora gestiscono i tempi sono abbastanza simili e cambiare un po 'se si ripete il bilancio, a volte np.sum
vittorie, somtimes np.inner
.
Per il grande array, il lavoro effettivo di np.sum
viene eseguito in C e l'overhead a tempo costante dall'interprete Python è trascurabile.
È una buona osservazione, ma l'aumento del numero di elementi nell'array ha esacerbato il problema per me. Per gli elementi 1M che hai, 'np.inner' ha preso 62,2 microsecondi, mentre' np.sum' ha impiegato 1,04 ms, o quasi 17 volte di più, – bcf
Quale versione di 'numpy' usi? Ho '1.11.0'. – rocksportrocker
E: hai eseguito il cronometro più volte? – rocksportrocker