2013-07-20 15 views

Odpowiedz

6

Musisz użyć sqrt z modułu cmath

>>> import cmath 
>>> cmath.sqrt(-1) 
1j 
1

Pierwiastek kwadratowy z -1 nie jest liczbą rzeczywistą, lecz raczej liczbą urojoną. IEEE 754 nie ma możliwości reprezentowania liczb urojonych.

numpy obsługuje numery zespolone. Proponuję użyć że: http://docs.scipy.org/doc/numpy/user/basics.types.html

+1

Domyślam się, że @ marriam używa już numpy, ponieważ 'np.sqrt (-1)' powoduje wyświetlenie ostrzeżenia 'invalid value problems ...', podczas gdy 'math.sqrt (-1)' powoduje błąd ValueError: błąd domeny matematyki ". –

+0

@WarrenWeckesser Tak czy inaczej, zrozumienie, jakie liczby są złożone, pomoże jej. – Marcin

+0

yup u r right im już używasz numpy –

22

Aby uniknąć invalid value ostrzegawczy/błąd argument do sqrt funkcji NumPy musi być złożona:

In [8]: import numpy as np 

In [9]: np.sqrt(-1+0j) 
Out[9]: 1j 

Jak @AshwiniChaudhary zauważył w komentarzu, można również użyć cmath biblioteka standardowa:

In [10]: cmath.sqrt(-1) 
Out[10]: 1j 
-1

Inni prawdopodobnie sugerowali bardziej pożądane metody, ale aby dodać do konwersacji, zawsze można pomnożyć dowolną liczbę mniej niż 0 (wartość, którą chcesz sqrt, -1 w tym przypadku) przez -1, a następnie sqrt tego. Po prostu wiedz, że twój wynik jest wyimaginowany.

6

Właśnie odkryłem funkcję wygody numpy.lib.scimath.sqrt wyjaśnione w sqrt documentation. Używam go w następujący sposób:

>>> from numpy.lib.scimath import sqrt as csqrt 
>>> csqrt(-1) 
1j 
Powiązane problemy