Когда я выполняю операцию numpy.arctanh (x) для x> = 1, он возвращает nan, что нечетно, потому что когда я выполняю операцию в Wolfram | alpha, он возвращает сложные значения, которые мне нужны для моего приложения. Кто-нибудь знает, что я могу сделать, чтобы Numpy не подавлял сложные значения?numpy.arctanh (x) для x> = 1 возвращает NaN, но мне нужен комплекс
ответ
Добавьте +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)
Хм. Это похоже на неправильную ветку: мнимая часть результата должна быть действительно +1.5707 ... –
Возьмите комплексное сопряжение с [numpy.conj()] (http://docs.scipy.org/doc/numpy/reference /generated/numpy.conj.html)? – Paul
Нет, я просто немного суетливый по разрезам ветвей. Кахан несколько лет назад давал предложения о том, как они должны работать на поддерживающей IEEE 754 машине, а именно, что знак реальной части (в случае atanh) должен использоваться для определения, какая сторона ветви разрезает точку. Похоже, что NumPy не следует этим предложениям: 'arctanh'' complex (24, 0.0) 'и' complex (24, -0.0) 'оба дают тот же результат, что немного разочаровывает. –
Это сработало. Благодарю. – user34028
Должна быть отметка рядом с ответом Павла, которая позволит вам принять ее. Нет необходимости в «Разрешенном» редактировании. :-) –
Замечательно видеть, как эти 3D-модели ведут себя правильно за один раз. Спасибо, парни! – user34028