Ga naar hoofdinhoud

NumPy 2.0-release: belangrijkste wijzigingen en migratie

Ontdek alle nieuwe features en wijzigingen in de NumPy 2.0-update.
· 9 min lezen

Verken met AI

Naarmate data science zich ontwikkelt, zijn veranderingen in veelgebruikte libraries onvermijdelijk. Dit keer krijgt de NumPy-library een update naar versie 2.0. Deze grote update is in juni 2024 uitgebracht en brengt veel nieuwe features en verbeteringen naar de populaire Python-library.

Met zo’n grote sprong in wijzigingen zijn er onvermijdelijk punten om op te letten die kunnen vereisen dat je je bestaande code aanpast.

In dit artikel delen we een overzicht van wat NumPy 2.0 omvat, de belangrijkste veranderingen en hoe je kunt migreren naar NumPy 2.0.

Introductie tot NumPy 2.0

Gebaseerd op jaren aan feedback en technologische vooruitgang is NumPy 2.0 een ambitieuze upgrade, anders dan de vele eerdere updates van de afgelopen jaren.

In hun releaseblogpost introduceerden ze een vernieuwde API, verbeterde regels voor scalarpromotie, een nieuwe DType-API en een nieuw string-DType, compatibiliteitsverbeteringen en afstemming van API-standaarden. Door deze inspanningen zullen gebruikers significante verbeteringen in performance en documentatie merken.

Maar met zo’n grote verandering in de library brengt deze release ook wat verstoring met zich mee. Zo zijn de nieuwe API- en ABI-wijzigingen niet backward-compatible.

Grote nieuwe features

Volgens de releasenotes introduceert NumPy 2.0 ingrijpende wijzigingen. Dit zijn de belangrijkste:

API- en ABI-wijzigingen

In deze update zijn verschillende opschoonwijzigingen doorgevoerd in de API en ABI (Application Binary Interface).

Met de nieuwe update, zoals beschreven in NEP (NumPy Enhancement Proposal) 52, laat NumPy zijn gebruikelijke nadruk op backward-compatibility deels los om een gestroomlijndere, schonere en eenvoudigere API te bieden.

Enkele opvallende wijzigingen:

  • Scheidingslijn tussen publieke en private API: Met een moduulstructuur is er nu een duidelijke splitsing tussen publieke en private API in de NumPy-API voor Python.
  • Opschonen van de namespace: Functies zijn vereenvoudigd om NumPy makkelijker te leren. Zie de volledige verwijderlijst voor meer info.
  • Uitschakelen van niche-functionaliteit: Veel niet‑aanbevolen functies en aliassen zijn verwijderd.
  • Nieuw aangepast type: Voor de C-API is een nieuwe publieke API voor het maken van aangepaste DType uitgebracht.

Voor de ABI-wijzigingen zal er sprake zijn van breuk in de nieuwe release. Dit beïnvloedt binaries van pakketten die de NumPy C-API gebruiken.

Alles wat gebouwd is tegen een eerdere NumPy 1.xx-release werkt niet met NumPy 2.0. Verderop deel ik hoe je volgens hun aanbevelingen kunt migreren. Je krijgt een ImportError‑melding, wat duidt op binaire incompatibiliteit.

Nieuwe DType-API en StringDType

Zoals voorgesteld in NEP 41, introduceert deze 2.0-update een nieuwe API voor het implementeren van door de gebruiker gedefinieerde, aangepaste datatypen met het StringDType-datatype. Deze nieuwe API biedt native ondersteuning voor variabele‑lengte stringdatatypen, waar NumPy‑gebruikers al lang om vragen.

Regels voor scalarpromotie

Aanvankelijk voorgesteld in NEP 50 zijn de scalarpromotieregels in NumPy ook bijgewerkt om verrassingen voor gebruikers te voorkomen. Voorheen hing promotie vaak af van de datawaarden van invoerarrays in plaats van alleen hun DTypes, wat verwarrend kan zijn.

Voor de nieuwe promotiepaden, zie de afbeelding hieronder:

DType precision and promotion

Bron: NumPy DType-precisie en -promotie

Prestatieverbeteringen

Deze release brengt ook enkele prestatieverbeteringen.

Dit zijn enkele belangrijke verbeterpunten:

  • Snellere sorteerfuncties
  • Verbeteringen in de performance van lineaire‑algebrabewerkingen op macOS via macOS Accelerate

Windows-compatibiliteit

Om Windows-gebruikers beter te bedienen, heeft het NumPy-team in deze release ook verschillende compatibiliteitsproblemen opgelost.

Zo is het standaard integertype op Windows gewijzigd naar int64 in plaats van int32, om het standaardgedrag op andere OS‑platformen te matchen.

Verbeterde documentatie en bruikbaarheid

Er is meer documentatie toegevoegd aan NumPy’s moduulstructuur en de navigatie in de referentiegids is verbeterd. De documentatie over bouwen vanaf bron is ook volledig herschreven.

Hoe migreer je naar NumPy 2.0

Updaten naar NumPy 2.0

Om met deze nieuwe versie van NumPy aan de slag te gaan, moet je eerst upgraden van je huidige versie naar de nieuwste.

Gebruik daarvoor simpelweg de upgrade-optie in deze opdracht:

pip install -U numpy

Of gebruik deze:

pip install –upgrade numpy

De upgrade-optie werkt gespecificeerde pakketten bij naar de nieuwste versie, in dit geval NumPy. Laat na het uitvoeren van de opdracht het systeem het pakket installeren totdat je de melding “Successfully installed numpy-2.0.0” ziet.

Als je liever naar een specifieke versie bijwerkt in plaats van naar de nieuwste, gebruik dan deze opdracht:

pip install numpy==2.0.0

Dit zorgt ervoor dat je de juiste versie installeert, in dit geval 2.0.0.

Voor een extra controle voer je deze opdracht uit:

pip list

Dit toont al je geïnstalleerde pakketten/libraries met hun versies. Controleer of de numpy-library is bijgewerkt naar versie 2.0.0. 

Tijdens het installeren kun je ook afhankelijkheidsmeldingen in het rood tegenkomen. Dit betekent dat er na de update mogelijke problemen in je code kunnen ontstaan. Je kunt dan per geval kijken welke onderdelen en libraries zijn getroffen.

Upgraden naar NumPy 2.0 kan tijdelijk verstorend zijn, dus zorg ervoor dat je alles goed migreert in je scripts en toekomstige pipelines.

Voor een volledige gids, zie de officiële NumPy 2.0 Migration Guide van de ontwikkelaars.

Dit zijn de belangrijkste aandachtspunten bij het migreren:

Omgaan met wijzigingen in NumPy-datatypromotie

Voor een volledige gids over de verschillende gedragsveranderingen en verwachte datatypewijzigingen, raadpleeg deze tabel in NEP 50.

Het grootste probleem voor backward-compatibility is de precisie van je scalars.

Bijvoorbeeld, wanneer zo’n bewerking wordt uitgevoerd:

np.float32(6) + 6.

Dit retourneert een float32-datatype in plaats van een float64-datatype, wat backward-compatibility lastig maakt. Om dit aan te pakken, raden ze het volgende aan:

Datatypen expliciet casten: gebruik de int()-, float()- of numpy_scalar.item()-scalars om je datatype expliciet op te geven.

Waarschuwingen inschakelen om wijzigingen op te sporen: gebruik waarschuwingen om via error-tracebacks naar veranderingen te zoeken.

Omgaan met namespace‑wijzigingen

Met deze 2.0-update kunnen de vele namespace-verwijderingen je code beïnvloeden. Het NumPy-team stelt deze stappen voor:

  1. Controleer de verouderde aliassen en migratierichtlijnen hier.
  2. Vervang verouderde aliassen door een backward‑compatibel alternatief.
  3. Controleer op private members die in de 2.0‑update zijn verwijderd.
  4. Gebruik de bestaande API als je private members gebruikte.

Omgaan met ABI-breuken

Als je een Python-pakket gebruikt dat afhankelijk is van de C-API van NumPy, moet je eventuele ABI‑breuken aanpakken. De ontwikkelaars hebben specifiek advies voor NumPy 2.0 uitgebracht voor dit soort situaties om de incompatibiliteit aan te pakken:

Ruff‑plugin om Python‑code bij te werken

Om je te helpen tijdens het migratieproces, kun je de Ruff‑plugin gebruiken met een speciale Ruff‑regel, NPY201.

Ruff is op PyPI beschikbaar als ruff. Om Ruff te installeren, voer je dit in de command line in:

pip install ruff

Voor meer details, zie de volledige installatiehandleiding van Ruff.

Zorg dat je de NP201 regel opgeeft in je pyproject.toml:

[tool.ruff.lint]
select = ["NPY201"]

Je kunt de NPY201‑regel ook via de command line opgeven:

$ ruff check path/to/code/ --select NPY201

Bijdragen uit de community

De release van NumPy 2.0 is de culminatie van de inspanningen van de community. Dankzij de vele NEP’s die door de community zijn voorgesteld, zijn veel langverwachte voorstellen eindelijk geïmplementeerd.

Toegewijde ontwikkelaars, onderzoekers en enthousiastelingen hebben een sleutelrol gespeeld in deze baanbrekende release, door hun expertise te delen, feedback te geven en codeverbeteringen in te dienen die NumPy 2.0 aanzienlijk hebben gevormd.

Conclusie

NumPy 2.0 is een grote stap voorwaarts voor de Python‑programmeertaal, met veel nieuwe features en verbeteringen in performance, compatibiliteit en bruikbaarheid. Als je problemen ervaart met migratie of fouten tegenkomt, kun je het beste rechtstreeks contact opnemen met het NumPy‑team.

Ik hoop dat dit artikel je heeft geholpen de belangrijkste wijzigingen in deze spannende update van NumPy te begrijpen. Voor meer verdieping, lees onze NumPy-tutorial.

Ben je nieuw met NumPy en wil je meer ontdekken? Probeer onze Introduction to NumPy‑cursus of bekijk deze live code-along training voor NumPy. 

Austin Chia

Auteur

Austin Chia

Ik ben Austin, een blogger en techschrijver met jarenlange ervaring als zowel datascientist als data-analist in de gezondheidszorg. Ik begon mijn techreis met een achtergrond in biologie en help nu anderen dezelfde overstap te maken via mijn techblog. Mijn passie voor technologie heeft geleid tot schrijfbijdragen aan tientallen SaaS-bedrijven, waarmee ik anderen inspireer en mijn ervaringen deel.

Onderwerpen

Gerelateerd