# SciPy

SciPy est un projet visant à unifier et fédérer un ensemble de bibliothèques Python à usage scientifique. Scipy utilise les tableaux et matrices du module NumPy.
Cette distribution de modules est destinée à être utilisée avec le langage interprété Python afin de créer un environnement de travail scientifique très similaire à celui offert par Scilab, GNU Octave, Matlab voire R.
Il contient par exemple des modules pour l'optimisation, l'algèbre linéaire, les statistiques, le traitement du signal ou encore le traitement d'images.
Il offre également des possibilités avancées de visualisation grâce au module matplotlib.
Afin d'obtenir d'excellentes performances d'exécution (point faible des langages interprétés), la plupart des algorithmes de SciPy et NumPy sont codés en C. Le module NumPy permet d'appliquer des opérations simultanément sur l'ensemble d'un tableau permettant d'écrire un code plus lisible, plus facile à maintenir et donc plus efficace.
Le projet suit la même philosophie que le langage Python à savoir clarté du code, facilité d'apprentissage et extensibilité.
Le projet est sous licence libre (BSD) et sponsorisé par Enthought (en), entreprise informatique qui développe également la distribution de Python Enthought Canopy, destinée au calcul scientifique.

## Historique

Dans les années 1990, Python a été étendu afin d'inclure un type de tableau pour le calcul numérique appelé Numeric. Le data scientist Travis Oliphant a finalement remplacé cet ensemble de fonctions en concevant et écrivant la librairie NumPy en 2006. Cette bibliothèque est un mélange de Numeric et de Numarray qui avaient été lancés en 2001.
Dans les années 2000, le nombre d'extensions a augmenté. De même, un intérêt croissant pour la création d'environnement complet de calcul scientifique et technique s'est développé.
En 2001, Travis Oliphant, Eric Jones et Pearu Peterson ont fusionné le code qu'ils avaient écrit et l'ont appelé SciPy. Celui-ci fournit une collection standard d'opérations numériques courantes sur la structure de données du tableau Numeric.
Peu après, Fernando Pérez a publié IPython, un interpréteur de commande interactif très amélioré et largement utilisé dans la communauté des developpeurs. Puis, John Hunter a publié la première version de Matplotlib, la bibliothèque graphique 2D.

## Structure de données

La structure de données de base utilisée par SciPy est un tableau multidimensionnel fourni par la librairie NumPy. NumPy gère, par exemple, quelques fonctions de base dans les domaines de l'algèbre linéaire, les transformations de Fourier et la génération de nombres aléatoires. Ensuite, NumPy étend ces fonctions.
NumPy peut également être utilisé comme un conteneur multidimensionnel de données, avec des types de données arbitraires. Cela permet à NumPy de s'intégrer de manière transparente et rapide à une grande variété de bases de données.
Les anciennes versions de SciPy, qui utilisaient Numeric comme type de tableau, sont dépréciées en faveur de la structure de données NumPy.

## Sous-modules

La partie « Apprentissage automatique » a été regroupée sous deux modules complémentaires de SciPy appelées SciKit :
* sckit-learn pour ce qui concerne la modélisation de données (régression, classification, segmentation, clustering, réduction de dimension...) ;
* sckit-image pour accéder à des algorithmes prédéfinis permettant de faire du traitement d'image (en incluant des algorithmes de scikit-learn).