我收到警告 <RuntimeWarning: invalid value encountered in sqrt>

新手上路,请多包涵

我正在尝试在 python 中运行二次方程。但是,它不断给我警告

RuntimeWarning: invalid value encountered in sqrt

这是我的代码:

 import numpy as np

a = 0.75 + (1.25 - 0.75)*np.random.randn(10000)
print(a)
b = 8 + (12 - 8)*np.random.randn(10000)
print(b)
c = -12 + 2*np.random.randn(10000)
print(c)
x0 = (-b - np.sqrt(b**2 - (4*a*c)))/(2 * a)
print(x0)

原文由 Maroof G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

这不是 100% Python 相关的。您无法计算负数的平方根(在处理实数时)。

b**2 - (4*a*c) 为负数时,您没有采取任何预防措施。

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

让我们测试一下你是否有负值:

 >>> import numpy as np
>>>
>>> a = 0.75 + (1.25 - 0.75) * np.random.randn(10000)
>>> b = 8 + (12 - 8) * np.random.randn(10000)
>>> c = -12 + 2 * np.random.randn(10000)
>>>
>>> z = b ** 2 - (4 * a * c)
>>> print len([_ for _ in z if _ < 0])
71

原文由 DeepSpace 发布,翻译遵循 CC BY-SA 3.0 许可协议

没有为严格负实数定义平方根,numpy 将生成 nan 对于“真实”dtype 的负输入 int , float-np.infnan

但是,平方根是为所有 复杂 数据类型定义的:

类型例如 xnp.sqrt(x)RuntimeWarning正浮动1.1.正整数11阳性复合物1+0J1负浮动-1.nan ⚠️负整数-1nan ⚠️负复合体-1+0j1j无穷np.infnp.inf负无穷大-np.infnan ⚠️钠盐np.nannan

原文由 iacob 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题