NumPy
NumPy (pronunciat Plantilla:AFIc-en (numpai) o, a voltes Plantilla:AFIc-en[1][2] (numpi)) és una biblioteca per al llenguage de programació Python que dona soport per a crear vectores i matrius grans multidimensionales, junt en una gran colecció de funcions matemàtiques d'alt nivell per a operar en elles. El precursor de NumPy, Numeric, va ser creat originalment per Jim Hugunin en contribucions de varis atres desenrolladors. En 2005, Travis Oliphant va crear NumPy incorporant característiques de la competència Numarray en Numeric, en àmplies modificacions. NumPy és un software de còdic obert i conta en molts colaboradors.
Història
[editar | editar còdic]El llenguage de programació Python no va ser dissenyat originalment per a computació numèrica, pero va atraure l'atenció de la comunitat científica i d'ingenieria des del principi. En 1995 es va fundar el grup d'interés especial (SIG) matrix-sig en l'objectiu de definir un paquet de computació de vectores; entre els seus membres es trobava el dissenyador i mantenedor de Python Guido van Rossum, qui va estendre la sintaxis de Python (en particular la sintaxis d'indexación) per a facilitar la computació de vectores.[3]
Jim Fulton va completar una implementació d'un paquet per a matrius, després generalisat per Jim Hugunin i cridat Numeric (també conegut com les "extensions numèriques de Python" o "NumPy"). Hugunin, estudiant de postgrau en l'Institut de Tecnologia de Massachusetts (MIT), <span title="Erro en la seqüencia d'órdens: no existix el mòdul «DecodeEncode».">: Plantilla:R/where es va unir a la Corporació per a Iniciatives d'Investigació Nacional (CNRI) en 1997 per a treballar en JPython, deixant a Paul Dubois del Laboratori Nacional Lawrence Livermore (LLNL) per a assumir el càrrec de mantenedor. <span title="Erro en la seqüencia d'órdens: no existix el mòdul «DecodeEncode».">: Plantilla:R/where Atres colaboradors primerencs inclouen a David Ascher, Konrad Hinsen i Travis Oliphant. <span title="Erro en la seqüencia d'órdens: no existix el mòdul «DecodeEncode».">: Plantilla:R/where
Es va escriure un nou paquet cridat Numarray com a tongada més flexible de Numeric.[4] De la mateixa manera que Numeric, actualment també està obsolet.[5][6] Numarray tenia operacions més ràpides per a matrius grans, pero era més llent que Numeric per a les menudes,[7] per lo que durant un temps abdós paquets es varen usar en paralel per a diferents casos d'us. L'última versió de Numeric (v24.2) es va publicar l'11 de novembre de 2005, mentres que l'última versió de Numarray (v1.5.2) es va publicar el 24 d'agost de 2006.[8]
Hi havia un desig d'incloure Numeric en la biblioteca estàndar de Python, pero Guido van Rossum va decidir que el còdic no es podia mantindre en el seu estat en eixe moment. Plantilla:Quàn[9] A principis de 2005, el desenrollador de NumPy, Travis Oliphant, volia unificar la comunitat entorn a un sol paquet d'apany i va portar les característiques de Numarray a Numeric, llançant el resultat com NumPy 1.0 en 2006.[4] Este nou proyecte formava part de SciPy. Per a evitar instalar el gran paquet SciPy solament per a obtindre un objecte de matriu, este nou paquet es va separar i es va cridar NumPy. El soport per a Python 3 es va afegir en 2011 en la versió 1.5.0 de NumPy.[10]
En 2011, PyPy va començar a desenrollar una implementació de la API NumPy per a PyPy.[11] Encara no és totalment compatible en NumPy.[12]
Característiques
[editar | editar còdic]NumPy apunta a l'implementació de Python de referència CPython, un intérpret de còdic de bytes no optimizador. Els algoritmes matemàtics escrits per a esta versió de Python a sovint s'eixecuten molt més llent que els equivalents compilados. NumPy aborda el problema de la llentitut en part en proporcionar matrius multidimensionales, funcions i operadors que operen de manera eficient en matrius, lo que requerix reescriure una miqueta de còdic, principalment bucles interns, usant NumPy.
L'us de NumPy en Python brinda una funcionalitat comparable a MATLAB, ya que abdós s'interpreten,[13] i abdós permeten a l'usuari escriure programes ràpits sempre que la majoria de les operacions funcionen en vectores o matrius en lloc d'escalares. En comparació, MATLAB conta en una gran cantitat de caixes de ferramentes adicionals, en particular Simulink, mentres que NumPy està intrínsecament integrat en Python, un llenguage de programació més modern i complet. Ademés, es troben disponibles paquets complementaris de Python; SciPy és una biblioteca que agrega més funcionalitat similar a MATLAB i Matplotlib és un paquet de traçat que proporciona una funcionalitat de traçat similar a MATLAB. Internament, tant MATLAB com NumPy es basen en BLAS i LAPACK per a càlculs d'àlgebra llineal eficients.
Els bindings de Python de l'àmpliament utilisada biblioteca de visió per computadora OpenCV utilisen matrius NumPy per a almagasenar i operar en senyes. Ya que les imàgens en múltiples canals es representen simplement com a matrius tridimensionals, indexar, tallar o emmaixquerar en atres matrius són formes molt eficients d'accedir a píxels específics d'una image. La matriu NumPy com a estructura de senyes universal en OpenCV per a imàgens, punts de característiques extrets, núcleus de filtrat i molts més simplifica enormement el fluix de treball de programació i la depuració .
L'estructura de senyes ndarray
[editar | editar còdic]La funcionalitat principal de NumPy és la seua estructura de senyes "ndarray", per a una matriu de n dimensions. Estes matrius són vistes escalonades de la memòria.[4] A diferència de l'estructura de senyes de llista incorporada de Python, estes matrius s'escriuen de forma homogénea: tots els elements d'una única matriu deuen ser del mateix tipo.
Dites matrius també poden ser vistes en búferes de memòria assignats per extensions de C o C++, Cython i Fortran a l'intérpret CPython sense la necessitat de copiar senyes, lo que brinda un major grau de compatibilitat en les biblioteques numèriques existents. Esta funcionalitat és explotada pel paquet SciPy, que inclou vàries d'estes biblioteques (en particular BLAS i LAPACK). NumPy té soport incorporat per a ndarrays mapeados en memòria.[4]
Llimitacions
[editar | editar còdic]Insertar o agregar entrades a una matriu no és tan trivialmente possible com lo és en les llistes de Python. La rutina np.pad(...) per a estendre matrius crea noves matrius en la forma desijada i els valors de farcidura, copia la matriu donada en la nova i la torna. La operació np.concatenate([a1, a2])de NumPy no vincula realment les dos matrius, sino que torna una nova, ompli en les entrades d'abdós matrius donades en seqüència. La remodelació de les dimensions d'una matriu en np.reshape(...) solament és possible sempre que el número d'elements de la matriu no canvie. Estes circumstàncies s'originen en el fet de que les matrius de NumPy deuen ser vistes en búferes de memòria contigus. Un paquet de tongada cridada Blaze intenta superar esta llimitació.[14]
Els algoritmes que no es poden expressar com una operació vectorizada normalment s'eixecutaran llentament perque deuen implementar-se en "Python pur", mentres que la vectorización pot aumentar la complexitat de la memòria d'algunes operacions de constant a llineal, perque es deuen crear matrius temporals que siguen tan grans com les entrades. Varis grups han implementat la compilació en temps d'eixecució de còdic numèric per a evitar estos problemes. Les solucions de còdic obert que interactuen en NumPy inclouen scipy.weave, numexpr[15] i Numba.[16] Cython i Pythran són atres alternatives de compilació estàtica.
Vore també
[editar | editar còdic]Referències
[editar | editar còdic]- ↑ Pine. «Python resources». Rutgers University. Consultat el 2017-04-07.
- ↑ «How do you say numpy?». Reddit. Consultat el 2017-04-07.
- ↑ (2011).Computing in Science and Engineering.13(2)
- 9–12.
- ↑ 4,0 4,1 4,2 4,3 (2011).Computing in Science and Engineering.IEEE.
- ↑ «Numarray Homepage». Consultat el 2006-06-24.
- ↑ Travis E. Oliphant (2006-12-07). Guide to NumPy.
- ↑ Travis Oliphant and other SciPy developers. «[Numpy-discussion] Status of Numeric». Archivat des d'el original, el 3 de febrer de 2017. Consultat el 2017-02-02.
- ↑ «NumPy Sourceforge Files». Consultat el 2008-03-24.
- ↑ «History_of_SciPy - SciPy wiki dump». scipy.github.io.
- ↑ «NumPy 1.5.0 Release Notes». Consultat el 2011-04-29.
- ↑ «PyPy Status Blog: NumPy funding and status update». Consultat el 2011-12-22.
- ↑ «NumPyPy Status». Consultat el 2013-10-14.
- ↑ The SciPy Community. «NumPy for Matlab users». Archivat des d'el original, el 20 de maig de 2017. Consultat el 2017-02-02.
- ↑ «Blaze Ecosystem Docs». Read the Docs. Consultat el 2016-07-17.
- ↑ Francesc Alted. «numexpr». Consultat el 2014-03-08.
- ↑ «Numba». Consultat el 2014-03-08.
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «NumPy» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.