【问题标题】:RuntimeWarning: invalid value encountered in arccosRuntimeWarning:在 arccos 中遇到无效值
【发布时间】:2016-02-10 15:02:55
【问题描述】:

我刚开始使用 Python,但相处得很好。我不断收到您在下面看到的错误,并且不确定问题出在哪里,因为我相信这些值是正确的并已说明。你认为问题究竟是什么?我正在尝试从 t = 0 到 t=PM 绘制图形,您在下面看到的公式是角 arccos。

无法在线找到此 arccos 错误的故障排除方法。运行 Python 3.5。

import numpy as np
import matplotlib
from matplotlib import pyplot
from __future__ import division

rE = 1.50*(10**11)
rM = 3.84*(10**8)
PE = 3.16*(10**7)
PM = 2.36*(10**6)

t = np.linspace(0, PM, 200)

# anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in arccos
y = 0.5*(np.arccos(2*(np.pi)*t*((1/PM)-(1/PE))+90))

【问题讨论】:

  • arccos 仅在[-1,1] 范围内定义。见"domain" in the numpy docs。你喂它一个数字 > 1。
  • 我来到这里是因为有时 arccos 的输入仅略大于 1。(由于数值精度)。我用 np.arccos(np.minimum(1, array)) 解决了它
  • @gota 的替代品,它也考虑了负值:np.arccos(np.around(array,4))

标签: python numpy trigonometry


【解决方案1】:

如果你简化为只是

np.arccos(90)

(这是传递给 arccos 的数组中的第一个元素),您将收到相同的警告

这是为什么呢? arccos() 尝试解决 cos(x) = 90x。但是,这样的值没有意义,因为它是 outside of the possible domain for arccos [-1,1]

还请注意,至少在最近的 numpy 版本中,此计算返回 nan

>>> import numpy as np
>>> b = np.arccos(90)
__main__:1: RuntimeWarning: invalid value encountered in arccos
>>> b
nan

【讨论】:

  • 我太傻了!早该知道的!猜猜我的计算有错误。感谢您的帮助!
【解决方案2】:

np.arccos() 函数只能取 -11 之间的值,包括两者。

见:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arccos.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2013-01-29
    • 1970-01-01
    • 2019-04-10
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多