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
Odpowiedz
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)
Hmm. To wygląda na niewłaściwą gałąź: wyimaginowana część wyniku powinna wynosić +1.5707 ... –
Weź sprzężoną liczbę zespoloną za pomocą [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul
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. –
To działało. Dzięki. – user34028
Obok odpowiedzi Pawła powinien znajdować się znaczek, który pozwoli ci go zaakceptować. Nie ma potrzeby edycji "rozwiązanej". :-) –
Wspaniale jest widzieć te modele 3D zachowujące się poprawnie na raz. Dzięki chłopaki! – user34028