Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können

Normalerweise schreibe ich einen Quantencomputersimulator in Python. Aus diesem Grund werden sehr häufig komplexe Zahlen verwendet.

Python und Numpy unterstützen auch komplexe Zahlen, daher ist dies kein allzu großes Problem, aber es gibt einige Fallen, daher werde ich sie alle zusammenfassen.

Grundlagen komplexer Zahlen in Python

Dies ist die, die Sie normalerweise in der Referenz finden. Leicht überprüfen.

Die imaginäre Einheit ist "1j" und der Typ ist "komplex"

In der Mathematik wird i oft für imaginäre Einheiten verwendet, in Python wird jedoch "1j" verwendet. (In Bereichen wie Elektrizität habe ich gesehen, dass i für Strom verwendet wird, daher wird die imaginäre Einheit auf j gesetzt, aber ich weiß nichts anderes in anderen Bereichen)

Sie können auch so etwas wie "2j" oder "1.23j" schreiben. (Normalerweise bedeutet doppelt so viel wie "1j", 1,23 mal) Während "1" und "1." unterschiedliche Typen haben, sind "1j" und "1.j" beide gleich.

Sie können auch "a + b * 1. j" als "Komplex (a, b)" mit a und b als Gleitkommazahlen schreiben.

Nehmen Sie den Realteil und den Imaginärteil mit ".real", ".imag" heraus und nehmen Sie ein komplexes Konjugat mit "conjugate ()"

(1 + 2j) .real ist 1, (1 + 2j) .imag ist 2. Beachten Sie, dass es sich nicht um eine Methode handelt. Fügen Sie daher nicht () hinzu. Komplexe Konjugate verwenden ".conjugate ()", wie "(1 + 2j) .conjugate ()". Da dies eine Methode ist, ist () erforderlich. Übrigens können ".real", ".imag", "conjugate ()" tatsächlich für float und int verwendet werden.

numpy kann auch normal verwendet werden

Selbst mit numpy können Sie normalerweise komplexe Zahlen verwenden, z. B. "np.array ([1 + 2j, 3, 4j, 5 + 6.7j])". Zu diesem Zeitpunkt ist "dtype" standardmäßig "complex128". .real, .imag, .conjugate () kann auch für numpy Arrays verwendet werden. In numpy können Sie auch ".conj ()" anstelle von ".conjugate ()" verwenden.

Zusätzlich ist es notwendig, ".conj (). T" zu verwenden, um das Elmeet-Konjugat der Matrix zu nehmen, was ein wenig mühsam ist. Mit np.matrix war es möglich mit .H. Es scheint nicht in "np.array" zu sein.

cmath statt math

Verwenden Sie "cmath importieren" anstelle von "Mathematik importieren". Während die Funktion "math" reelle Zahlen in der Definition und im Bereich verwendet, enthält "cmath" auch komplexe Zahlen in der Definition und im Bereich. Weitere Informationen finden Sie unter Offizielle Dokumentation.

Es gibt auch nützliche Funktionen wie "phase ()", um die Abweichung einer komplexen Zahl zu ermitteln, "polar ()", um einen Tapple mit Radius und Abweichung zurückzugeben, und "rect ()", um einen Komplex aus Radius und Abweichung zu erstellen. ..

Vorsichtsmaßnahmen beim Umgang mit komplexen Zahlen in Python

Ich werde einige Fallen schreiben und wie ich damit umgehen soll.

Wenn es sich um eine komplexe Zahl handeln kann, erstellen Sie das numpy-Array im Voraus mit einer komplexen Zahl.

Python konvertiert den Typ implizit, ohne den Typ selbst zu schreiben, aber in numpy hat das Array einen Typ, und der Typ des Arrays ändert sich nicht willkürlich. (Dasselbe gilt, wenn das int-Array kein Float wird.)

a = np.array([1., 2.]) #dtype ist float64
a *= 1j
# UFuncTypeError: Cannot cast ufunc 'multiply' output from dtype('complex128') to dtype('float64') with casting rule 'same_kind'

Um dies zu verhindern Geben Sie den Typ von Anfang an wie "np.array ([1., 2.], dtype = np.complex128)" an Es ist notwendig, von Anfang an komplexe Zahlen wie "np.array ([1 + 0j, 2.], dtype = np.complex128)" einzuschließen.

Das innere Produkt komplexer Vektoren ist "np.vdot" anstelle von "np.dot"

Das ist wirklich eine Falle.

Das innere Produkt des komplexen Vektors ist die Summe des Produkts des komplexen Konjugats von $ u $ und des Produkts jeder Komponente von $ v $, wie z. B. $ u \ cdot v = \ sum_ {i = 1} ^ n u_i ^ * v_i $. Ist normal, aber in "np.dot" wird die Summe der Produkte jeder Komponente so genommen, wie sie ist, ohne das komplexe Konjugat zu nehmen. Wenn Sie wirklich "np.dot" verwenden müssen, nehmen Sie das komplexe Konjugat selbst. Wenn Sie dagegen "np.vdot" verwenden, können Sie das innere Produkt auch dann richtig erhalten, wenn es sich um einen komplexen Vektor handelt.

Offensichtlich können komplexe Zahlen nicht in ihrer Größe verglichen werden.

Natürlich für alle, die sich mit komplexen Zahlen in anderen Sprachen beschäftigen. Komplexe Zahlen können nicht verglichen werden.

Genauer gesagt ist es nicht möglich, die Größe des "komplexen Typs" zu vergleichen. Selbst wenn der Programmierer weiß, dass das Berechnungsergebnis eine reelle Zahl ist, kann es nicht verglichen werden, wenn es sich um einen komplexen Zahlentyp für den Computer handelt. Es muss eine reelle Zahl sein, z. B. ".real".

Es scheint keine effiziente Möglichkeit zu geben, den Absolutwert eines komplexen Zahlenarrays zu "quadrieren"

Da np.abs intern so etwas wie sqrt (real ** 2 + imag ** 2) berechnet, ist es verschwenderisch, es zu quadrieren. Wenn Sie dagegen eine Berechnung wie "arr.real ** 2 + arr.imag ** 2" auf der Python-Seite schreiben, wird diese nicht direkt berechnet, was zu einer Verschwendung von Speicherplatz führt. Ich habe es schon einmal recherchiert, aber StackOverflow sagt, dass numba verwendet werden kann -of-complex-numpy-ndarray). Es scheint, dass es keinen überraschenden Weg gibt, dies ohne unnötige Open-Flat-Berechnung nur mit Python und Numpy zu tun.

Recommended Posts

Hier finden Sie eine Zusammenfassung der Dinge, die beim Umgang mit komplexen Zahlen in Python hilfreich sein können
Zusammenfassung der Punkte, die beim Schreiben eines Programms zu beachten sind, das unter Python 2.5 ausgeführt wird
Python-E-Book-Zusammenfassung nützlich für die frei lesbare Datenanalyse
Vorsichtsmaßnahmen beim Umgang mit Kontrollstrukturen in Python 2.6
Zeichenkodierung beim Umgang mit Dateien in Python 3
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Vorsichtsmaßnahmen beim Umgang mit ROS MultiArray in Python
Beachten Sie beim Initialisieren einer Liste in Python
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Erstellen Sie ein Flag in den Einstellungen, das nur beim Testen mit Django True ist
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Zusammenfassung der Dinge, die bei der Verwendung von Pandas praktisch waren
Japanische Ausgabe beim Umgang mit Python im Visual Studio
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
Eine Geschichte, die verschwunden ist, als ich einen Pfad angegeben habe, der mit tilda (~) in Python Open beginnt
Formatübersicht der Formate, die mit gensim serialisiert werden können
Zusammenfassung der Dinge, die installiert werden müssen, um die tf-Pose-Schätzung auszuführen
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
Verwenden Sie ein Makro, das beim Speichern von Python mit vscode ausgeführt wird
Beachten Sie Links, die bei der Verwendung von Python, Selenium2 hilfreich sein können
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Vorsichtsmaßnahmen, die beim Aufbau einer PYTHON-Umgebung beachtet werden müssen
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Behandeln Sie komplexe Zahlen in Python
So schreiben Sie, wenn Sie eine Zahl nach der Gruppennummer setzen möchten, die durch einen regulären Ausdruck in Python ersetzt werden soll
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Über die Sache, dass Fackelzusammenfassung wirklich verwendet werden kann, wenn ein Modell mit Pytorch erstellt wird
[Python] Ein Programm, das die maximale Anzahl von Spielzeugen findet, die mit Ihrem Geld gekauft werden können
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
Eine kurze Zusammenfassung von Graphviz in Python (nur für Mac erklärt)
Achten Sie beim Drucken von Japanisch mit Python 3 auf LANG für UnicodeEncodeError
Ein Datensatz, den GAMEBOY mit Python nicht erstellen konnte. (PYBOY)
Erstellen Sie eine Spinbox, die mit Tkinter in Binär angezeigt werden kann
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Parallele Berechnung (Pathos) beim Umgang mit Objekten, die nicht eingelegt werden können
Erstellen Sie eine Spinbox, die mit Tkinter in HEX angezeigt werden kann
Was in datetime neu ist, ist in Python 3 etwas nützlicher
Ruft eine Liste der Dateien in einem Ordner mit Python ohne Pfad ab
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Testen mit Zufallszahlen in Python
Problemumgehungsnotiz bei Segmentierungsfehler: 11 wird beim Import von opencv angezeigt, das mit virtualenv of python installiert wurde
[Python] Code, der zu Beginn beim Scraping als Anfänger mit Hirntod geschrieben werden kann
Das Gesetz der Zahlen in Python
Bis zum Umgang mit Python in Atom
Beim Schreiben eines Programms in Python
Grundlegende Zusammenfassung des Scrapings mit Anfragen, die Anfänger absolut verstehen können [Python]
Rufen Sie mit Python eine Liste der in der aktuellen Umgebung installierten Pakete ab
gRPC-Methoden, die beim Umgang mit Protokollpuffern verwendet werden, geben Python CopyFrom, Extend ein
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
[Python-Memo] Seien Sie vorsichtig, wenn Sie ein zweidimensionales Array erstellen (Liste der Listen).