title: NumPy
text: NumPy of numpy is een uitbreiding op de programmeertaal Python met als doel in Python array's en matrices te kunnen gebruiken en met een grote bibliotheek van wiskundige functies om met deze arrays te werken. Het is opensourcesoftware. De voorganger van numpy, Numeric, werd oorspronkelijk door Jim Hugunin gemaakt met bijdragen van diverse andere ontwikkelaars. Travis Oliphant maakte numpy in 2005 door het grote deel van Numarray erin op te nemen en er uitgebreide aanpassingen aan toe te voegen.
  
  Geschiedenis 
  Numpy is op twee eerdere pakketten Python om array's te bewerken gebaseerd. Numeric, dat redelijk compleet en stabiel is, blijft beschikbaar maar is achterhaald. Numpy werd oorspronkelijk voor een groot deel in 1995 door Jim Hugunin geschreven, maar hij kreeg daar de hulp van anderen bij, van Jim Fulton, David Ascher, Paul DuBois en Konrad Hinsen. Numeric is in de nieuwere implementatie Numarray volledig herschreven, maar is ook uitgefaseerd. Numpy is een combinatie van de twee, bouwt voort op Numeric, maar met de kenmerken van Numarray eraan toegevoegd.
  
  Er is geprobeerd Numeric in de standaard bibliotheek van Python te krijgen, maar Guido van Rossum, de grondlegger van Python, was van mening dat de code in de toenmailge staat niet was te onderhouden. Een ander probleem was dat voor grote arrays Numeric erg traag was. Als gevolg hiervan werd een ander pakket genaamd Numarray gemaakt. Numarray was sneller voor grote arrays, maar langzamer voor kleine arrays. Enige tijd werden Numeric en Numarray naast elkaar gebruikt, beide met een andere manier om dezelfde doelen te bereiken. De laatste versie van Numeric v24.2 werd op 11 november 2005 uitgebracht en Numarray v1.5.2 werd vrijgegeven op 24 augustus 2006.
  
  Travis Oliphant heeft in het begin van 2005 geprobeerd beide pakketten te verenigen. De code van Numeric werd aangepast om het beter te kunnen onderhouden en het flexibel genoeg te maken om de nieuwe functies van Numarray toe te kunnen passen. Dit nieuwe project was een onderdeel van SciPy. Om te voorkomen dat een heel pakket moest worden geïnstalleerd alleen maar om een array te kunnen declareren, werd dit het nieuwe, aparte pakket NumPy. De broncode is vrij beschikbaar.
  
  Versie 1.5.1 van numpy is compatibel met Python versie 2.4-2.7 en 3.1+. Ondersteuning voor Python 3 werd toegevoegd in 1.5.0. PyPy startte in 2011 de ontwikkeling van een API van de NumPy voor PyPy.
  
  Motivatie 
  Pythonprogramma's worden in het algemeen door een interpreter uitgevoerd, wat maakt dat wiskundige algoritmen vaak langzamer lopen dan in computerprogramma's die zijn gecompileerd. NumPy lost dit op door multidimensionale arrays te gebruiken, met daarbij de nodige bewerkingen die op de arrays kunnen worden toegepast. Een programma waarin vooral veel bewerkingen op arrays en matrices worden uitgevoerd is met het gebruik van numpy bijna net zo snel als hetzelfde programma in de C, dat wordt gecompileerd. PyPy is een alternatieve implementatie van Python waarbij de broncode wordt gecompileerd op het moment dat die wordt uitgevoerd.
  
  NumPy is een gratis alternatief voor MATLAB. MATLAB wordt net zoals Python geïnterpreteerd. Zowel Python als MATLAB stellen de gebruiker in staat om snel programma's te schrijven, dit zolang de meeste handelingen werken met arrays of matrices in plaats van enkelvoudige variabelen. Een voordeel van MATLAB is het grote aantal extra modules dat beschikbaar is, waaronder Simulink. NumPy heeft daarentegen het voordeel dat Python moderner en completer is en opensource. Andere, aanvullende Python-pakketten zijn ook beschikbaar: SciPy is een bibliotheek die op MATLAB lijkt en Matplotlib is een pakket om uiteenlopende grafieken zoals in MATLAB te maken. Zowel MATLAB en NumPy zijn op LAPACK gebaseerd voor de nodige berekeningen in de lineaire algebra.
  
  Voorbeeld 
  Hieronder staat er een voorbeeld van hoe NumPy en matplotlib kunnen worden gebruikt om er een grafiek mee te maken.
  
  >>> import numpy
  >>> from matplotlib import pyplot
  >>> x = numpy.linspace(0, 2 * numpy.pi, 100)
  >>> y = numpy.sin(x)
  >>> pyplot.plot(x, y)
  >>> pyplot.show()
  
  Numerieke wiskunde
  Opensourcesoftware en vrije software
  Python (programmeertaal)