Python est un très bon langage. Il ne fait aucun doute qu'il s'agit d'une plate-forme de programmation très reconnaissante qui fournit de nombreuses bibliothèques hautes performances et hautes performances et peut réaliser un traitement avancé de l'information même pour les personnes qui ne sont pas familiarisées avec l'ingénierie de l'information. Cependant, il n'est pas bon de croire aveuglément ou de surconfigurer Python. Par conséquent, j'écris cet article avec l'espoir qu'il servira de référence pour comprendre les forces et les faiblesses de Python et en faire un usage efficace. Je pense que la bonne façon de l'utiliser est de combiner les bons points de Python avec d'autres systèmes de traitement du langage. Le texte pour apprendre Python est basé sur ceci. → J'ai fait un texte en Python
● Comparaison de vitesse en simulant une orbite circulaire (C vs Python, Cython vs Python) C'est une victoire écrasante en langage C. Le résultat montre que C est plus de 25 fois plus rapide que Python. Cependant, pour un programme de calcul numérique simple comme celui-ci, vous pouvez également voir que l'utilisation de Cython peut atteindre des vitesses comparables à celles du langage C sans apporter de modifications majeures au programme Python. ● Génération d'images de l'ensemble Mandelbrot (JavaScript vs Python, Cython vs Python) Ceci est un exemple qui visualise l'ensemble de Mandelbrot sous la forme d'une image d'une taille de 1024 x 1024. (L'environnement d'exécution utilisé pour la comparaison de vitesse est Windows10, Intel Core i7-5500U 2,39 GHz) → Exemple d'implémentation HTML5 (JavaScript) Cliquez sur le bouton `démarrer 'pour exécuter Le temps d'exécution moyen était de 0,231 seconde. (Utilisation de Google Chrome) → Exemple d'implémentation Python + Pillow Après le téléchargement py MandelbrotPython.py m.png -2.0 2.0 -2.0 2.0 Exécutez en tant que. (L'image est générée en m.png) Le temps d'exécution moyen était de 53,645 secondes. En comparant le temps d'exécution, il était de 232,23 fois. Commenter la partie qui appelle Pillow n'a pas d'effet notable sur le temps d'exécution. C'est une victoire écrasante pour JavaScript. Bien sûr, cela dépend du navigateur que vous exécutez, mais c'est toujours une victoire à deux chiffres. → Exemple d'implémentation Cython + Pillow Après le téléchargement, compilez avec le système de traitement Cython pour créer un module Python import MandelbrotPyx MandelbrotPyx.MakeMandelbrot('m2.png',-2.0,2.0,-2.0,2.0) Etc. Le temps d'exécution dans le même environnement informatique est en moyenne de 7,601 secondes était. En traitant avec Cython, nous avons pu accélérer environ 7 fois. (Il y a encore place à l'optimisation) En passant, la vitesse d'exécution de Java et JavaScript approche C ces jours-ci. (JavaScript Super Introduction Text, Java Super Introductory Text) ● Comparaison de la vitesse des listes / ensembles / dictionnaires Python est un bon environnement pour traiter de grandes quantités de données en mémoire. Cependant, il est nécessaire d'utiliser correctement le type de structure de données à utiliser. Sinon, le temps de traitement sera trop long pour une utilisation pratique. J'ai testé le temps de traitement de Python list / set / dictionary. → Tentative de temps de traitement de la structure des données (Extrait du texte Python: Text body / items / b465b0cf05b1b7fd4975)) -Exemples de programmes: spdTest00.py, spdTest01.py .py), spdTest02.py Si vous le traitez comme un tableau avec un index entier, la liste Python est rapide, mais vous ne pouvez pas rechercher d'éléments. Vous faites peut-être une "recherche linéaire". Lors de la recherche d'éléments, vous devez utiliser des ensembles et des dictionnaires. ● Comparaison de la vitesse du programme en langage C avec / sans NumPy L'un des principaux objectifs de l'utilisation de Python est le traitement des données. De nombreuses bibliothèques pour la science des données et l'apprentissage automatique sont basées sur NumPy. Puisqu'il y a une telle situation, j'ai créé un programme pour trouver le produit des matrices et étudié la vitesse de NumPy. Comparaison de 3 programmes de calcul du produit de matrices (rapport PDF) (Extrait du texte Python: corps du texte) Programmes: matmult01.py, matmult01_np.py ), Matmult01.c Comparé au calcul du produit des matrices en utilisant une liste sous forme de tableau, NumPy est 10 000 fois plus rapide. Quand j'ai vu le rapport de vitesse, j'ai pensé: "Quelque chose ne va pas?" De plus, c'est plus de 30 fois plus rapide que d'écrire simplement en langage C. Dans ce cas, Python + NumPy est la victoire écrasante. __Note) __ C'est le cas de NumPy utilisant Intel MKL. Ce sera plus lent pour NumPy sans MKL. ** (Supplément) ** En particulier, les opérations matricielles NumPy sont rapides, et si le traitement que vous souhaitez réaliser peut être décrit comme des calculs matriciels, la vitesse d'exécution peut être grandement améliorée. (→ Rapport PDF: Exemple montrant la grande vitesse du produit des matrices NumPy) Ceci est un extrait de "Python3 Library Book". (à suivre)
Python est un langage convivial pour les débutants. Pourtant, c'est un langage hautement fonctionnel. Les gens qui ont appris la programmation C et Java à l'école peuvent en être parfaitement conscients, mais au début, ils n'ont aucun sens. Cela ne fonctionne que si vous écrivez beaucoup de "mots" qui n'ont rien à voir avec l'algorithme de base (idée de procédure) ... Nous, professeurs, expliquons des «mots» incompréhensibles comme «je n'ai pas à comprendre au début…» ou «je pense que c'est magique! D'un autre côté, Python a très peu de "mots inintelligibles". Par exemple, même si vous faites de la première leçon "un programme qui affiche" Hello, World "" que vous faites souvent à l'école, il y a une grande différence entre Java et Python. Écrivons en fait des programmes Java et Python et comparons-les. → Version Java "Hello, World" (5 lignes) → Version Python "Hello, World" (1 ligne) Voici un exemple pour afficher «Hello, World» sur l'interface graphique. → Version Java "Hello, World" (33 lignes: version JavaFX) → Version Python "Hello, World" (17 lignes: version Kivy) → Version Python "Hello, World" (8 lignes: version Tkinter) Même avec juste cette leçon d'introduction, le nombre de lignes dans le programme est très différent. (Python est plus court) De plus, Python permet de nombreux styles d'écriture qui peuvent exprimer directement ce que vous voulez faire, et la productivité de la programmation est extrêmement élevée. (Apprenez Python pour plus d'informations) Dans le cas de C et Java, les traitements avancés qui doivent être beaucoup décrits sont préparés à l'avance en Python, et ils peuvent être appelés facilement. Je vous remercie. C'est un sentiment d'enseigner sur le terrain. Pour le moment, je vais l'expliquer pour éviter les malentendus, mais la signification de l'apprentissage du langage C est très grande. (L'interpréteur Python lui-même est écrit en C) La base du contrôle des appareils, la base de la gestion des ressources de stockage, la base des entrées / sorties, la base de la communication, la base de la gestion des processus ... C est inévitable lors de l'apprentissage des bases de l'ingénierie de l'information. (De plus, la plupart des systèmes d'exploitation tels que Windows, macOS et Linux sont écrits en C.) Si vous apprenez Python, veuillez apprendre le langage C. Idéalement, vous devriez créer un module en C et le faire fonctionner à partir de Python. Il existe des options telles que Cython et Numba, mais je pense qu'il est très bon d'appeler une fonction écrite en langage C via ctypes.
Je pense que la meilleure chose à propos de Python est l'abondance de bibliothèques. Même dans mon séminaire, j'ai pu répondre rapidement à l'élève (toujours en troisième année à cette époque) qui a dit: «Je voudrais essayer la reconnaissance d'image ...». Après cela, j'ai rapidement conçu les grandes lignes du produit et la thèse de fin d'études et rendu la recherche de fin d'études fructueuse (gagnant dans un concours techno). Bien sûr, l'étudiant n'est pas non plus doué pour la programmation. Avec C ++ et Java, il est impossible de répondre aux besoins des étudiants à cette vitesse. Python + OpenCV + Pillow gagne. Ne vous méprenez pas, Python lui-même est lent, mais divers packages sont souvent implémentés en C et sont très rapides. Un exemple frappant est que l'utilisation de Python + NumPy pour le traitement numérique est plus rapide (vitesse de développement et d'exécution) que d'écrire mal en C ou FORTRAN. Aussi, SymPy, scikit-learn, Keras, PyTorch, Chainer ... Des logiciels au niveau de "Puis-je publier ceci gratuitement?" Au moment où je suis entré dans le monde de Python, j'ai été surpris de sa richesse, "Qu'est-ce que c'est!" Et "Qu'est-ce que c'est?!". La perception que Python est un langage pour l'IA est également due à l'abondance de bibliothèques associées. Ceci est également trompeur, mais Python n'est pas à l'origine un langage pour l'IA. Cela signifie que les chercheurs en IA trouvent cela très pratique. Les bibliothèques telles que scicit-learn pour l'apprentissage automatique et Keras qui exploitent TensorFlow sont des bibliothèques standard dans le domaine de l'apprentissage automatique / AI, et «Python est un prérequis».
Les indices (tranches) attachés à des structures de données telles que les listes et les taples Python sont très expressifs et il est facile d'accéder à l'intérieur de la structure de données. En outre, une fois que vous vous êtes habitué à utiliser des fonctions telles que la carte et le filtre et les expressions lambda, vous pouvez programmer sous une forme qui reflète la structure des données telle qu'elle est. Si vous le faites bien, vous pouvez réduire la boucle de for et écrire le programme entier de manière concise, alors apprenez-le.
Ceci est difficile à comprendre tant que vous n’avez pas maîtrisé la programmation, mais c’est un processus avancé que «les données peuvent être exécutées comme un programme». C'est une fonction qui peut exécuter des expressions et des instructions créées en tant que données de chaîne de caractères. (La fonction d'exécuter des données en tant que programme est une fonction indispensable pour la programmation basée sur l'IA.) C'est une affaire privée, mais je pense que Lisp n'est plus nécessaire pour les activités de recherche. (→ Correction: Après tout, Lisp est important) Maintenant, pour moi, le langage nécessaire pour aborder les thèmes liés à l'IA est
écrit par Katsunori Nakamura
Recommended Posts