Berücksichtigung der Stärken und Schwächen von Python

Python ist eine sehr gute Sprache. Es besteht kein Zweifel, dass es sich um eine sehr dankbare Programmierplattform handelt, die viele leistungsstarke und leistungsstarke Bibliotheken bietet und eine erweiterte Informationsverarbeitung auch für Personen realisieren kann, die mit Informationstechnik nicht vertraut sind.   Es ist jedoch nicht gut, Python blind zu glauben oder zu übertreiben. Daher schreibe ich diesen Artikel in der Hoffnung, dass er als Referenz dient, um die Stärken und Schwächen von Python zu verstehen und effektiv zu nutzen. Ich denke, der richtige Weg, es zu verwenden, besteht darin, die guten Punkte von Python mit anderen Sprachverarbeitungssystemen zu kombinieren.   Der Text zum Erlernen von Python basiert darauf. → Ich habe einen Python-Text erstellt

Experimentieren Sie mit der Ausführungszeit von Python

● Geschwindigkeitsvergleich durch Simulation einer Kreisbahn (C gegen Python, Cython gegen Python) Dies ist ein überwältigender Sieg in C-Sprache. Die Ergebnisse zeigen, dass C mehr als 25 Mal schneller als Python ist. Bei einem einfachen numerischen Berechnungsprogramm wie diesem können Sie jedoch auch feststellen, dass mit Cython Geschwindigkeiten erreicht werden können, die mit der C-Sprache vergleichbar sind, ohne dass wesentliche Änderungen am Python-Programm vorgenommen werden müssen.   ● Bilderzeugung des Mandelbrot-Sets (JavaScript vs Python, Cython vs Python) Dies ist ein Beispiel, das das Mandelbrot-Set als Bild mit einer Größe von 1024 x 1024 visualisiert. (Die für den Geschwindigkeitsvergleich verwendete Ausführungsumgebung ist Windows 10, Intel Core i7-5500U 2,39 GHz.) → Implementierungsbeispiel für HTML5 (JavaScript) Klicken Sie zum Ausführen auf die Schaltfläche "Start" Die durchschnittliche Ausführungszeit betrug 0,231 Sekunden. (Mit Google Chrome) → Beispiel für die Implementierung von Python + Pillow Nach dem Download   py MandelbrotPython.py m.png -2.0 2.0 -2.0 2.0 Ausführen als. (Bild wird in m.png erzeugt) Die durchschnittliche Ausführungszeit betrug 53,645 Sekunden. Im Vergleich zur Ausführungszeit waren es 232,23 Mal. Das Auskommentieren des Teils, der Pillow aufruft, hat keinen spürbaren Einfluss auf die Ausführungszeit. Es ist ein überwältigender Sieg für JavaScript. Natürlich hängt es von dem Browser ab, den Sie ausführen, aber es ist immer noch ein zweistelliger Gewinn. → Implementierungsbeispiel für Cython + Pillow Kompilieren Sie nach dem Herunterladen mit dem Cython-Verarbeitungssystem, um das Python-Modul zu erstellen   import MandelbrotPyx   MandelbrotPyx.MakeMandelbrot('m2.png',-2.0,2.0,-2.0,2.0) Und so weiter. Die Ausführungszeit in derselben Computerumgebung beträgt durchschnittlich 7,601 Sekunden war. Durch die Verarbeitung mit Cython konnten wir etwa siebenmal beschleunigen. (Es gibt noch Raum für Optimierungen)   Abgesehen davon nähert sich die Ausführungsgeschwindigkeit von Java und JavaScript heutzutage C an. (JavaScript Super-Einführungstext, Java Super-Einführungstext)   ● Listen- / Set- / Wörterbuch-Geschwindigkeitsvergleich Python ist eine gute Umgebung für die Verarbeitung großer Datenmengen im Arbeitsspeicher. Es ist jedoch erforderlich, die Art der zu verwendenden Datenstruktur ordnungsgemäß zu verwenden. Andernfalls ist die Bearbeitungszeit für den praktischen Gebrauch zu lang. Ich habe die Verarbeitungszeit von Python list / set / dictionary getestet. → Versuch zur Verarbeitung der Datenstruktur (Auszug aus Python-Text: Textkörper / items / b465b0cf05b1b7fd4975)) Beispielprogramme: spdTest00.py, spdTest01.py .py), spdTest02.py Wenn Sie es wie ein Array mit einem ganzzahligen Index behandeln, ist die Python-Liste schnell, Sie können jedoch nicht nach Elementen suchen. Vielleicht machen Sie eine "lineare Suche". Bei der Suche nach Elementen müssen Sie Mengen und Wörterbücher verwenden.   ● Geschwindigkeitsvergleich des C-Sprachprogramms mit / ohne NumPy Einer der Hauptzwecke bei der Verwendung von Python ist die Datenverarbeitung. Viele der Bibliotheken für Datenwissenschaft und maschinelles Lernen basieren auf NumPy. Da es eine solche Situation gibt, habe ich ein Programm erstellt, um das Produkt der Matrizen zu finden, und untersucht, wie schnell NumPy ist. Vergleich von 3 Programmen zur Berechnung des Matrizenprodukts (PDF-Bericht) (Auszug aus Python-Text: Textkörper) Programme: matmult01.py, matmult01_np.py ), Matmult01.c Im Vergleich zur Berechnung des Matrizenprodukts mithilfe einer Liste als Array ist NumPy 10.000-mal schneller. Als ich das Geschwindigkeitsverhältnis sah, dachte ich: "Stimmt etwas nicht?" Darüber hinaus ist es mehr als 30 Mal schneller als das einfache Schreiben in C-Sprache. In diesem Fall ist Python + NumPy der überwältigende Sieg. __Hinweis) __ Dies ist der Fall bei NumPy mit Intel MKL. Für NumPy ohne MKL wird es langsamer. ** (Ergänzung) ** Insbesondere ist die Matrixoperation von NumPy schnell, und wenn der Prozess, den Sie realisieren möchten, als Matrixberechnung beschrieben werden kann, kann die Ausführungsgeschwindigkeit erheblich verbessert werden. (→ PDF-Bericht: Ein Beispiel für die hohe Geschwindigkeit des Produkts von NumPy-Matrizen) Dies ist ein Auszug aus "Python3 Library Book".   (Fortsetzung folgt)

Was ist gut an Python?

■ Einfaches Lernen und Funktionalität

Python ist eine anfängerfreundliche Sprache. Trotzdem ist es eine hochfunktionale Sprache. Leute, die in der Schule C- und Java-Programmierung gelernt haben, sind sich vielleicht sehr bewusst, aber zunächst machen sie keinen Sinn. Es funktioniert nur, wenn Sie viele "Wörter" schreiben, die nichts mit dem grundlegenden Algorithmus (Prozeduridee) zu tun haben ... Wir Lehrer erklären so unverständliche "Worte" wie "Ich muss es zuerst nicht verstehen ..." oder "Ich denke, es ist Magie!".   Auf der anderen Seite hat Python nur sehr wenige "unverständliche Wörter". Selbst wenn Sie beispielsweise die erste Lektion zu einem Programm machen, das "Hallo Welt" anzeigt, das Sie häufig in der Schule machen, gibt es einen großen Unterschied zwischen Java und Python. Lassen Sie uns tatsächlich Java- und Python-Programme schreiben und vergleichen.   → Java-Version "Hello, World" (5 Zeilen) → Python-Version "Hello, World" (1 Zeile)   Das folgende Beispiel zeigt "Hallo, Welt" auf der GUI an.   → Java-Version "Hello, World" (33 Zeilen: JavaFX-Version) → Python-Version "Hello, World" (17 Zeilen: Kivy-Version) → Python-Version "Hello, World" (8 Zeilen: Tkinter-Version)   Selbst mit nur dieser Einführungsstunde unterscheidet sich die Anzahl der Zeilen im Programm erheblich. (Python ist kürzer) Darüber hinaus ermöglicht Python viele Schreibstile, die direkt ausdrücken können, was Sie tun möchten, und die Programmierproduktivität ist extrem hoch. (Weitere Informationen erhalten Sie in Python.) Im Fall von C und Java wird die erweiterte Verarbeitung, die häufig beschrieben werden muss, in Python im Voraus vorbereitet und kann problemlos aufgerufen werden. Vielen Dank.   Es ist ein Gefühl des Lehrens auf dem Gebiet.   Vorerst werde ich es erklären, um Missverständnisse zu vermeiden, aber das Erlernen der C-Sprache ist sehr sinnvoll. (Der Python-Interpreter selbst ist in C geschrieben.) Die Basis der Gerätesteuerung, die Basis des Umgangs mit Speicherressourcen, die Basis der Eingabe / Ausgabe, die Basis der Kommunikation, die Basis des Prozessmanagements ... C ist unvermeidlich, wenn Sie die Grundlagen der Informationstechnik erlernen. (Darüber hinaus sind die meisten Betriebssysteme wie Windows, MacOS und Linux in C geschrieben.)   Wenn Sie Python lernen, lernen Sie bitte die Sprache C. Idealerweise sollten Sie ein Modul in C erstellen und von Python aus bedienen. Es gibt Optionen wie Cython und Numba, aber ich denke, es ist sehr gut, eine in C-Sprache geschriebene Funktion über ctypes aufzurufen.

■ Reichlich vorhandene Bibliothek

Ich denke, das Beste an Python ist die Fülle an Bibliotheken. Selbst in meinem Seminar konnte ich schnell auf den Schüler (der damals noch in der dritten Klasse war) antworten, der sagte: "Ich würde gerne die Bilderkennung versuchen ...". Danach entwarf ich schnell den Entwurf des Produkts und die Abschlussarbeit und machte die Abschlussforschung fruchtbar (Gewinn in einem Technowettbewerb). Natürlich kann der Schüler auch nicht gut programmieren. Mit C ++ und Java ist es unmöglich, die Bedürfnisse der Schüler mit dieser Geschwindigkeit zu erfüllen. Python + OpenCV + Pillow gewinnt. Versteh mich nicht falsch, Python selbst ist langsam, aber verschiedene Pakete sind oft in C implementiert und sehr schnell. Ein prominentes Beispiel ist, dass die Verwendung von Python + NumPy für die numerische Verarbeitung schneller ist (Entwicklungs- und Ausführungsgeschwindigkeit) als das schlechte Schreiben in C oder FORTRAN. Auch SymPy, Scikit-Learn, Keras, PyTorch, Chainer ... Software auf der Ebene "Kann ich dies kostenlos veröffentlichen?" In dem Moment, als ich in die Welt von Python eintrat, war ich erstaunt, wie reich es war: "Was ist das!" Und "Was ist das ?!". Die Wahrnehmung, dass Python eine Sprache für KI ist, ist auch auf die Fülle verwandter Bibliotheken zurückzuführen. Dies ist ebenfalls irreführend, aber Python ist ursprünglich keine Sprache für KI. Dies bedeutet, dass KI-Forscher es sehr praktisch finden. Bibliotheken wie scicit-learn für maschinelles Lernen und Keras, die TensorFlow betreiben, sind Standardbibliotheken im Bereich maschinelles Lernen / KI, und "Python ist eine Voraussetzung".

■ Programmierung nach Datenstruktur

Indizes (Slices), die an Datenstrukturen wie Python-Listen und Taples angehängt sind, sind sehr ausdrucksstark und es ist einfach, auf das Innere der Datenstruktur zuzugreifen. Sobald Sie sich an die Verwendung von Funktionen wie Map- und Filter- sowie Lambda-Ausdrücken gewöhnt haben, können Sie in einer Form programmieren, die die Datenstruktur so wie sie ist widerspiegelt. Wenn Sie es gut machen, können Sie die Schleife um for reduzieren und das gesamte Programm präzise schreiben. Lernen Sie es also bitte.

■ "Metaprogrammierung" von eval und exec

Dies ist schwer zu verstehen, bis Sie die Programmierung beherrschen, aber es ist ein fortgeschrittener Prozess, dass "Daten als Programm ausgeführt werden können". Es ist eine Funktion, die Ausdrücke und Anweisungen ausführen kann, die als Zeichenkettendaten erstellt wurden. (Die Funktion zum Ausführen von Daten als Programm ist eine unverzichtbare Funktion für die AI-basierte Programmierung.) Es ist eine private Angelegenheit, aber ich bin der Meinung, dass Lisp für Forschungsaktivitäten nicht mehr benötigt wird. (→ Korrektur: Immerhin ist Lisp wichtig)   Für mich ist die Sprache, die benötigt wird, um AI-bezogene Themen anzugehen


geschrieben von Katsunori Nakamura

Recommended Posts

Berücksichtigung der Stärken und Schwächen von Python
Die Geschichte von Python und die Geschichte von NaN
[Python] Stärken und Schwächen von DataFrame in Bezug auf den Zeitaufwand
Verbinde viel Python oder und und
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Berechnen Sie die kürzeste Route eines Diagramms mit der Dyxtra-Methode und Python
Holen Sie sich den Aufrufer einer Funktion in Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
ffmpeg-Erstellen Sie eine Python-Umgebung und teilen Sie das Video
Angeben des Bereichs von Ruby- und Python-Arrays
der Zen von Python
Kopieren Sie die Liste in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Vergleichen Sie die Geschwindigkeit von Python Append und Map
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
[Python] Ein Programm, das die Anzahl der Täler zählt
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Der Prozess der Installation von Atom und der Ausführung von Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
Referenz und Änderung der rekursiven Python-Obergrenze
Ich habe mir die Versionen von Blender und Python angesehen
Ein Memorandum über die Umsetzung von Empfehlungen in Python
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Auf dem Weg zum Ruhestand von Python2
Über die Funktionen von Python
Quellinstallation und Installation von Python
Die Kraft der Pandas: Python
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
[Python] Herons Formelfunktionalisierung und Berechnung der maximalen Fläche
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
Ich möchte die Natur von Python und Pip kennenlernen
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
[Python3] "A // B" und "math.floor (A / B)" sind nicht immer gleich! ??
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht