Python 对于x>;=numpy.arctanh(x)1返回NaN,但我想要复杂的

Python 对于x>;=numpy.arctanh(x)1返回NaN,但我想要复杂的,python,numpy,nan,complex-numbers,Python,Numpy,Nan,Complex Numbers,当我对x>=1执行numpy.arctanh(x)操作时,它返回nan,这是奇怪的,因为当我在Wolfram | alpha中执行操作时,它返回复数值,这是我的应用程序所需要的。 有人知道我能做些什么来防止Numpy抑制复数吗?将+0j添加到实际输入中,使它们成为复数 Numpy遵循的是格言“垃圾输入,垃圾输出”的变体 飘进来,飘出去 >>> import numpy as np >>> np.sqrt(-1) __main__:1: RuntimeWarni

当我对x>=1执行numpy.arctanh(x)操作时,它返回nan,这是奇怪的,因为当我在Wolfram | alpha中执行操作时,它返回复数值,这是我的应用程序所需要的。
有人知道我能做些什么来防止Numpy抑制复数吗?

+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…以复共轭为例?不,我只是对分支切割特别挑剔。几十年前,Kahan就如何在IEEE 754支持机器上工作提出了建议,即应使用真实部分的符号(在atanh的情况下)来确定分支切割点的哪一侧。NumPy似乎没有遵循这些建议:
arctanh
of
complex(24,0.0)
complex(24,-0.0)
都给出了相同的结果,这有点令人失望。@Mark Dickinson Try+/-0.000001j,它给出了不同的分支。因此,在python 2.7.9中,
0.0j==-0.0j
True
,但是
0.0j是-0.0j
False
,因此当然也可以正确地编码限制。。。虽然正如你所指出的,他们似乎不是……这是有效的。谢谢。保罗的答案旁边应该有一个勾号,这样你就可以接受了。无需“已解决”编辑。:-)这一次看到这些3D模型正常运行真是太好了。谢谢大家!