Samenvatting
Numba 0.67.0 compileert Python-lussen naar machinecode, maar prestaties hangen vooral af van hoe vaak je de gecompileerde codegrens passeert.
Wat Numba 0.67.0 doet
Numba compileert numerieke Python-lussen naar machinecode zonder dat je de code naar C hoeft om te schrijven of elk onderdeel hoeft te vectoriseren. Het artikel werkt drie optimalisatietrucs uit rond één probleem: de grens tussen gewone Python en gecompileerde code.
De eerste truc gebruikt de decorateur `@njit` voor een lus die een NumPy-array met tien miljoen elementen doorloopt. Zonder decorateur verwerkt de Python-interpreter de typen bij ieder element. Met `@njit` leest Numba de typen bij de eerste aanroep, maakt een specialisatie en voert volgende aanroepen uit als native code.
De eerste aanroep bevat daardoor ook de compilatietijd. In het voorbeeld duurde die 0,2799 seconde. De meting vergelijkt daarnaast een gewone Python-lus, `@njit` en een NumPy-vectorisatie. De code controleert ook of alle methoden hetzelfde resultaat opleveren.
Waarom Numba relevant is voor Python-analytics
De winst zit niet automatisch in het toevoegen van een decorateur. Een kleine lus die vaak tussen Python en gecompileerde code wisselt, kan de voordelen van Numba tenietdoen. De drie trucs benaderen daarom dezelfde ontwerpvraag: hoe zorg je dat Numba voldoende werk in één gecompileerde passage uitvoert?
Dat onderscheid helpt bij de keuze tussen Numba en NumPy-vectorisatie. NumPy blijft geschikt wanneer een berekening zich goed laat uitdrukken met bestaande vectorbewerkingen. Numba past juist bij numerieke lussen die lastig te vectoriseren zijn, zolang de lusgrens goed ligt.
De voorbeelden zijn gecontroleerd met Numba 0.67.0. De meetopzet scheidt compilatietijd van herhaalde uitvoeringen, zodat je de eerste aanroep niet verwart met de prestaties daarna.
Numba: concrete takeaway
Meet bij Numba altijd afzonderlijk de eerste aanroep en de vervolgaanroepen. Houd de gecompileerde lus breed, vermijd onnodige terugkeer naar Python en vergelijk de uitkomst met NumPy-vectorisatie voordat je een implementatie kiest.
Verdiep je kennis
ETL uitgelegd — Extract, Transform, Load in gewone taal
Wat is ETL? Leer hoe Extract, Transform en Load werkt, het verschil met ELT, en welke tools je kunt gebruiken. Helder ui...
KennisbankPredictive Analytics — Wat kan het voor jouw bedrijf?
Ontdek wat predictive analytics is, hoe het werkt en hoe je het inzet voor je bedrijf. Van de 4 niveaus van analytics to...