La frammentazione pre-NumPy
A inizio 2000 il calcolo numerico in Python era frammentato: Numeric (1995, Jim Hugunin) e numarray (2001, STScI) erano due librerie array con API divergenti; la comunità scientifica era divisa.
Travis Oliphant (allora alla Brigham Young University, poi co-fondatore di Enthought e Continuum Analytics / Anaconda) unifica i due nel 2005-2006 con NumPy. La versione 1.0 è rilasciata il 25 ottobre 2006. Licenza BSD 3-Clause.
ndarray
Il cuore di NumPy è ndarray — array n-dimensionale omogeneo:
- Tipo dato fisso (float32, int64, ecc.) — più efficiente di liste Python
- Shape multi-dimensionale — matrici 2D, tensori 3D+
- Broadcasting — operazioni tra array di shape compatibili
- Vectorized operations — operazioni elementari senza for loop Python
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b) # broadcasting: [[11,22],[13,24]]
print(a @ b) # matrix multiply: [50, 110]
print(np.linalg.inv(a)) # matrix inverse
Gli operatori sono implementati in C + BLAS/LAPACK, 10-100x più veloci di loop Python equivalenti.
L’ecosistema scientifico
NumPy nasce per diventare la base di uno stack più ampio:
- SciPy (Eric Jones, Travis Oliphant, Pearu Peterson, 2001+) — algoritmi numerici avanzati
- matplotlib (John Hunter, 2003) — visualizzazione
- SymPy — calcolo simbolico
L’adozione concreta dipenderà dalla capacità di costruire intorno a ndarray un ecosistema coerente.
Finanziamento
NumPy è mantenuto da volontari e da Travis Oliphant senza una struttura di finanziamento dedicata.
Nel contesto italiano
Nei laboratori di ricerca scientifica italiani Python sta entrando come alternativa moderna a MATLAB e Fortran per prototipazione rapida. NumPy è il componente che rende plausibile questa scelta.
Riferimenti: NumPy 1.0 (25 ottobre 2006). Travis Oliphant. Unificazione di Numeric (1995) e numarray (2001). Licenza BSD 3-Clause. BLAS/LAPACK backend.
