就像fuglede所说,这里的问题是
np.float64无法处理最大为的数字
exp(1234.1)。尝试
np.float128改用:
>>> cc = np.array([[0.120,0.34,-1234.1]], dtype=np.float128)>>> ccarray([[ 0.12, 0.34, -1234.1]], dtype=float128)>>> 1 / (1 + np.exp(-cc))array([[ 0.52996405, 0.58419052, 1.0893812e-536]], dtype=float128)
但是请注意,使用扩展精度存在某些怪癖。它可能无法在Windows上运行;您实际上并没有获得完整的128位精度;当数字通过纯python时,您可能会失去精度。您可以在此处阅读有关详细信息的更多信息。
对于大多数实际目的,您可能近似
1 / (1 + <a largenumber>)为零。也就是说,只要忽略警告并继续前进即可。Numpy会为您处理近似值(使用时
np.float64):
>>> 1 / (1 + np.exp(-cc))/usr/local/bin/ipython3:1: RuntimeWarning: overflow encountered in exp #!/usr/local/bin/python3.4array([[ 0.52996405, 0.58419052, 0. ]])
如果要禁止显示警告,可以使用
scipy.special.expitWarrenWeckesser在对该问题的评论中建议的,:
>>> from scipy.special import expit>>> expit(cc)array([[ 0.52996405, 0.58419052, 0. ]])



