2015-04-18 3 views
10

Когда я выполняю операцию numpy.arctanh (x) для x> = 1, он возвращает nan, что нечетно, потому что когда я выполняю операцию в Wolfram | alpha, он возвращает сложные значения, которые мне нужны для моего приложения. Кто-нибудь знает, что я могу сделать, чтобы Numpy не подавлял сложные значения?numpy.arctanh (x) для x> = 1 возвращает NaN, но мне нужен комплекс

+0

Это сработало. Благодарю. – user34028

+1

Должна быть отметка рядом с ответом Павла, которая позволит вам принять ее. Нет необходимости в «Разрешенном» редактировании. :-) –

+0

Замечательно видеть, как эти 3D-модели ведут себя правильно за один раз. Спасибо, парни! – user34028

ответ

5

Добавьте +0j к вашим реальным входам, чтобы сделать их комплексными числами.

Numpy следует за изменением принципа «Мусор в, Мусор».

Плавать, плавать.

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

Комплекс в комплексе.

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

Хм. Это похоже на неправильную ветку: мнимая часть результата должна быть действительно +1.5707 ... –

+0

Возьмите комплексное сопряжение с [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul

+1

Нет, я просто немного суетливый по разрезам ветвей. Кахан несколько лет назад давал предложения о том, как они должны работать на поддерживающей IEEE 754 машине, а именно, что знак реальной части (в случае atanh) должен использоваться для определения, какая сторона ветви разрезает точку. Похоже, что NumPy не следует этим предложениям: 'arctanh'' complex (24, 0.0) 'и' complex (24, -0.0) 'оба дают тот же результат, что немного разочаровывает. –