2015-04-18 20 views
10

Kiedy wykonuję operację numpy.arctanh (x) dla x> = 1, zwraca nan, co jest nieparzyste, ponieważ kiedy wykonuję operację w Wolfram | alpha zwraca wartości zespolone, co jest potrzebne do mojej aplikacji. Czy ktoś wie, co mogę zrobić, aby Numpy nie tłumił złożonych wartości?numpy.arctanh (x) dla x> = 1 zwraca NaN, ale chcę kompleksowo

+0

To działało. Dzięki. – user34028

+1

Obok odpowiedzi Pawła powinien znajdować się znaczek, który pozwoli ci go zaakceptować. Nie ma potrzeby edycji "rozwiązanej". :-) –

+0

Wspaniale jest widzieć te modele 3D zachowujące się poprawnie na raz. Dzięki chłopaki! – user34028

Odpowiedz

5

Dodaj +0j do swoich rzeczywistych danych wejściowych, aby stały się liczbami zespolonymi.

Numpy śledzi odmianę maksymy "Wrzucanie śmieci, Wyrzucanie śmieci".

Pływak, wypłynięcie.

>>> import numpy as np 
>>> np.sqrt(-1) 
__main__:1: RuntimeWarning: invalid value encountered in sqrt 
nan 

Kompleks, złożony.

>>> numpy.sqrt(-1+0j) 
1j 
>>> numpy.arctanh(24+0j) 
(0.0416908044695255-1.5707963267948966j) 
+0

Hmm. To wygląda na niewłaściwą gałąź: wyimaginowana część wyniku powinna wynosić +1.5707 ... –

+0

Weź sprzężoną liczbę zespoloną za pomocą [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul

+1

Nie, po prostu jestem bardzo wybredna w kwestii wycinania gałęzi. Kahan dawał sugestie dekadę temu, jak powinny pracować na maszynie wspierającej IEEE 754, a mianowicie, że znak prawdziwej części (w przypadku atanh) powinien być użyty do określenia, która strona gałęzi przecina punkt. Wygląda na to, że NumPy nie stosuje się do tych sugestii: 'arctanh'' complex (24, 0.0) 'i' complex (24, -0.0) 'dają ten sam wynik, co jest nieco rozczarowujące. –