Cython Groupby -Funktion viel langsamer als eine ähnliche Numba -FunktionPython

Python-Programme
Guest
 Cython Groupby -Funktion viel langsamer als eine ähnliche Numba -Funktion

Post by Guest »

Ich habe eine sehr grundlegende Gruppe nach Funktion, die ich in einem Cython -Objekt verwenden möchte, aber es ist etwas wie 400 -mal langsamer als eine ähnliche Funktion in Python, die von Numba < /p>
Dies ist mein Cython-Funktion < /p>
@cython.boundscheck(False) # Deactivate bounds checking
@cython.wraparound(False) # Deactivate negative indexing.
@cython.ccall
def groupby(
in_index: cython.long[:], in_values: cython.float[:], number_of_results: cython.long
) -> cython.double[:]:
results = np.zeros(number_of_results, dtype=np.float64)
results_view: cython.float[:] = results
index: cython.long[:] = in_index
val: cython.float[:] = in_values
index_max: cython.Py_ssize_t = in_index.shape[0]
n: cython.Py_ssize_t
for n in range(index_max):
results_view[index[n]] += val[n]

return results
< /code>
Aber diese Funktion mit numba < /p>
@jit(nopython=True, fastmath=True)
def agg_sims(group_idx, a, number_of_sims):
output = np.zeros(number_of_sims, dtype=np.float64)
for i in range(group_idx.shape[0]):
output[group_idx] += a
return output
< /code>
Ich würde gerne Cython verwenden, da Numba nicht gut mit dem Objekt, das ich erstellt habe die Funktion in die eigene Datei aus und kompiliert sie mit Cython (unter Windows mit VS -Build -Tools) und verwendet einen Satz von Zufallsdaten, aber der Index wird geordnet < /p>
Dies ist ein Beispiel für die Daten < /p>
sim_index=np.array([0,1,2,2,3,3,3,3,3,4,4,5,5,5,5,6,6,7,7,7,7,7,8,8,9,9,9])

loss_values=np.array([983218.798545568,78773.246069412,427915.701586101,384401.565066934,976474.931385909,
491002.57968459,449277.841899304,2157814.69086177,634849.51236713,683151.164470444,951717.254327894,
338593.160096285,111153.600572457,327118.874300972,585857.183862426,1793115.50344123,775898.742468206,
236320.911958699,412790.930873261,894075.886633843,400713.081209467,1142732.59966746,
651378.893317142,238021.483213581,50557.1083702021,75622.454060533,153180.479257057])
< /code>
Die tatsächlichen Daten betragen ca. 2,5 m Werte

GroupBy In Cython haben mir dies mit Zeitit

805 ms ± 30,9 ms pro ms gegeben Schleife (Mittelwert ± std. Dev. Von 7 Läufen, jeweils 1 Schleife) < /p>
, aber die Numba -Version mit denselben Daten < /p>
4.35 ms ± 667 μs pro Schleife (Mittelwert ± std. Dev. Von 7 Läufen, jeweils 1 Schleife) < /p>
Ich bin nicht mehr verletzt, warum die Cython -Funktion so viel langsamer ist als die Numba -Funktion. < /p>
Die Cython -Funktion zeigt keine wichtigen Python -Wechselwirkungen in der Annotation -HTML -Datei. Wirklich nur die Numpy -Funktion.
Alle Vorschläge wären wirklich hilfreich.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post