2015-04-18 7 views
10

Quando eseguo l'operazione numpy.arctanh (x) per x> = 1, restituisce nan, che è dispari perché quando eseguo l'operazione in Wolfram | alpha, restituisce valori complessi, che è ciò di cui ho bisogno per la mia applicazione. Qualcuno sa cosa posso fare per impedire a Numpy di sopprimere valori complessi?numpy.arctanh (x) per x> = 1 restituisce NaN ma voglio complesso

+0

Ha funzionato. Grazie. – user34028

+1

Ci dovrebbe essere un segno di spunta accanto alla risposta di Paolo che ti permetterà di accettarlo. Non è necessaria la modifica "Risolto". :-) –

+0

È bello vedere questi modelli 3D comportarsi correttamente per una volta. Grazie ragazzi! – user34028

risposta

5

Aggiungi +0j ai tuoi ingressi reali per renderli numeri complessi.

Numpy segue una variazione della massima "Garbage in, Garbage out".

Galleggiare, galleggiare.

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

Complesso in, complesso fuori.

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

Hmm. Sembra il ramo sbagliato: la parte immaginaria del risultato dovrebbe essere in realtà +1.5707 ... –

+0

Prendere il coniugato complesso con [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul

+1

Nah, sto solo diventando pignolo per i tagli alle filiali. Kahan ha dato suggerimenti decenni fa su come dovrebbero funzionare su una macchina che supporta IEEE 754, vale a dire che il segno della parte reale (nel caso di atanh) dovrebbe essere usato per determinare quale lato del ramo taglia un punto. NumPy sembra non seguire questi suggerimenti: 'arctanh' di' complex (24, 0.0) 'e di' complex (24, -0.0) 'entrambi danno lo stesso risultato, che è un po 'deludente. –