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
risposta
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)
Hmm. Sembra il ramo sbagliato: la parte immaginaria del risultato dovrebbe essere in realtà +1.5707 ... –
Prendere il coniugato complesso con [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul
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. –
Ha funzionato. Grazie. – user34028
Ci dovrebbe essere un segno di spunta accanto alla risposta di Paolo che ti permetterà di accettarlo. Non è necessaria la modifica "Risolto". :-) –
È bello vedere questi modelli 3D comportarsi correttamente per una volta. Grazie ragazzi! – user34028