Wenn ich die Operation numpy.arctanh (x) für x> = 1 ausführe, gibt es nan zurück, was ungerade ist, wenn ich die Operation ausführe In Wolfram | alpha gibt es komplexe Werte zurück, die ich für meine Anwendung benötige. Weiß jemand, was ich tun kann, um zu verhindern, dass Numpy komplexe Werte unterdrückt?numpy.arctanh (x) für x> = 1 gibt NaN zurück, aber ich möchte komplex
Antwort
Fügen Sie +0j
zu Ihren realen Eingängen hinzu, um sie zu komplexen Zahlen zu machen.
Numpy folgt einer Variante der Maxime "Müll ein, Müll raus".
Hineinschwimmen, herausschweben.
>>> import numpy as np
>>> np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan
Komplex in, komplex aus.
>>> numpy.sqrt(-1+0j)
1j
>>> numpy.arctanh(24+0j)
(0.0416908044695255-1.5707963267948966j)
Hmm. Das sieht wie der falsche Zweig aus: Der Imaginärteil des Ergebnisses sollte wirklich +1.5707 sein ... –
Nimm den Komplex konjugiert mit [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference) /generated/numpy.conj.html)? – Paul
Nein, ich bin nur extra viel über Astschnitte. Kahan gab vor Jahrzehnten Vorschläge, wie sie auf einer IEEE-754-unterstützenden Maschine arbeiten sollen, nämlich dass das Vorzeichen des Realteils (im Fall von atanh) verwendet werden soll, um festzustellen, auf welcher Seite des Zweigs ein Punkt liegt. Es scheint, dass NumPy diesen Vorschlägen nicht folgt: "arctanh" von "complex (24, 0.0)" und von "complex (24, -0.0)" ergeben beide das gleiche Ergebnis, was ein wenig enttäuschend ist. –
Das hat funktioniert. Vielen Dank. – user34028
Es sollte ein Häkchen neben Pauls Antwort sein, damit Sie es akzeptieren können. Keine Notwendigkeit für die Bearbeitung "Gelöst". :-) –
Es ist großartig zu sehen, dass diese 3D-Modelle sich einmal richtig verhalten. Danke Leute! – user34028