Programmation

Comment calculer des matrices en Python sans NumPy

Pour de nombreuses applications, vous avez besoin de mathématiques. En Python, il y a le module maths qui gère les bases telles que les fonctions d’arrondi, factorielles et d’arrondi. Il comprend également les fonctions de puissance et logarithmique, trigonométrie, angulaire et hyperbolique. Pour les nombres complexes, le module est cmath. Ceux-ci ne gèrent cependant pas les opérations matricielles.

Certaines personnes recherchent des solutions matricielles aux problèmes de tableau, alors quelle est la différence ? La grande différence est que les valeurs de la matrice sont des nombres, un tableau peut contenir d’autres informations, même des chaînes. Les matrices peuvent représenter des équations, c’est là que la plupart des développeurs en ont besoin, du moins dans le cas du remplacement de NumPy.

Comment faire un calcul matriciel ?

Les opérations matricielles standard sont simples à réaliser, lors de l’ajout, vous ajoutez simplement les éléments, lors de la multiplication, vous pouvez utiliser un scalaire pour chaque élément et ainsi de suite.

La multiplication est un peu plus complexe mais de très peu. Ce qui le rend lourd, c’est que vous devez faire de nombreux calculs pour chaque solution, c’est là que la performance entre en jeu. Comme la majorité des calculs ne dépendent pas les uns des autres, ces calculs sont d’excellents candidats pour le calcul parallèle. Les GPU sont conçus pour ces types de calculs et ils sont conçus pour être facilement ajoutés aux systèmes de bureau.

Lorsque vous devez effectuer des calculs matriciels en Python, la première solution que vous trouvez est numPy. Cependant, NumPy n’est pas toujours le système le plus efficace pour calculer de nombreuses matrices.
Cet article couvrira les options dont vous disposez en Python.

Psssssst :  Plafond C++

Lorsque vous avez besoin d’alternatives, commencez par regarder plus attentivement ce pour quoi vous avez besoin d’opérations matricielles. Votre installation actuelle peut déjà avoir sa propre implémentation ou utiliser une bibliothèque sous-jacente. Un exemple est l’apprentissage automatique, où le besoin d’opérations matricielles est primordial. TensorFlow possède sa propre bibliothèque pour les opérations matricielles. Assurez-vous de connaître votre bibliothèque actuelle.

Dans de nombreux cas cependant, vous avez besoin d’une solution qui fonctionne pour vous. Il y a peut-être des limitations dans NumPy, certaines bibliothèques sont plus rapides que NumPy et spécialement conçues pour les matrices. Souvent, les développeurs souhaitent accélérer leur code afin de commencer à chercher des alternatives. L’une des raisons est que NumPy ne peut pas fonctionner sur les GPU.

Bien que cet article concerne des alternatives à NumPy, une bibliothèque construite au-dessus de NumPy, la bibliothèque Theano doit être mentionnée. La bibliothèque Theano est étroitement intégrée à NumPy et permet une matrice prise en charge par le GPU. Theano est une plus grande bibliothèque pour l’apprentissage automatique, mais vous ne pouvez retirer que les fonctions matricielles.

Pour une explication plus approfondie de l’utilisation de Theano, consultez cette page : http://www.marekrei.com/blog/theano-tutorial/

SpPy est une bibliothèque spécifiquement pour les tableaux clairsemés, elle peut toujours être utilisée pour les matrices. Un tableau clairsemé, soit dit en passant, est un tableau qui contient de nombreuses valeurs nulles. Cette bibliothèque est petite et efficace mais un peu limitée en raison de sa spécialisation. Il utilise également NumPy mais est plus efficace que NumPy.
https://pythonhosted.org/sppy/

Eigen est une implémentation efficace des matrices, pour l’utiliser en Python, vous avez besoin de miniEigen, disponible sur https://pypi.org/pypi/minieigen. Eigen est en fait inclus dans de nombreuses autres solutions. Il agit comme une bibliothèque de matrices génériques pour des modules et des frameworks plus spécialisés. Cette bibliothèque contient de nombreux modules pour la manipulation de matrices denses et de tableaux. Il prend également en charge l’algèbre linéaire, la décomposition et l’algèbre linéaire creuse. Le package a également une fonction de plugin pour que vous puissiez ajouter vos propres modules.
Pour utiliser Eigen, installez-le avec pip et importez-le dans votre code.

Psssssst :  Méthode Array map() en JavaScript

PyTorch est une bibliothèque pour Machine Learning, à cause de cela, elle a des opérations matricielles. L’importation de toute la bibliothèque est exagérée si vous ne souhaitez effectuer que quelques calculs. Cependant, si vous débutez avec un projet d’apprentissage automatique, assurez-vous de décider si celui-ci est fait pour vous.
Une autre alternative consiste à récupérer n’importe quelle bibliothèque C et à l’utiliser. Pour rendre cela possible, il existe une solution nommée cffi qui créera l’interface pour vous. Cette solution nécessite que vous connaissiez déjà C et que vous créiez un wrapper pour chaque fonction dont vous avez besoin. Le code aura alors l’air confus et difficile à lire, mais cela peut en valoir la peine en fonction de votre projet.

Si vous voulez simplement accélérer toutes les fonctions de tableau et numériques, vous pouvez utiliser numba à la place. Numba est un compilateur Python. Lorsque vous l’utiliserez, le compilateur créera du code binaire « juste à temps », jit. L’idée de jit est plus couramment utilisée avec Java mais est très utile pour les mathématiques lourdes en Python. Puisque Python est interprété, vous pouvez avoir des problèmes de performances avec des mathématiques lourdes, numba s’en occupe en compilant sur CPU ou GPU à votre choix.
Des fonctionnalités de calcul parallèle sont également disponibles. Par défaut, le compilateur s’exécute avec un verrou qui empêche de nombreux threads de s’exécuter en même temps. Vous pouvez le désactiver par un indicateur tant que vous êtes conscient des problèmes potentiels associés à la programmation parallèle.

Conclusion

Souvent, lorsque vous commencez à programmer en Python ou dans d’autres langages, vous rencontrez des limitations du langage, du compilateur ou autre chose. Lorsque vous êtes dans cette situation, vous devez vous arrêter et réfléchir à vos limitations et considérer combien d’autres personnes ont pu avoir la même situation. Dans le cas de Python et NumPy, de nombreux scientifiques et développeurs ont écrit du code qui nécessite une exécution rapide. Cet héritage a créé un grand nombre de branches qui peuvent résoudre votre problème sans vous obliger à changer de langue ou à écrire une nouvelle extension pour cette langue particulière.

Psssssst :  Utilisation de la variable globale PHP

Bouton retour en haut de la page