【问题标题】:Why RuntimeWarning encountered is dependent on the position of variables?为什么遇到的 RuntimeWarning 取决于变量的位置?
【发布时间】:2019-08-29 02:46:42
【问题描述】:

在以下代码中,我收到一条消息“RuntimeWarning:日志中遇到无效值”。我知道当日志值 a 小两个时会出现此消息。但是为什么它取决于变量的位置呢?就像在下面的代码中定义 s 如果我使用 np.log((Q[j])/np.log(P[j])) 我得到错误但是如果我用分母替换分子,则消息纸尿裤。为什么会这样?

`Q= np.array([0., 0., 2.02575004])
P=np.array([0.90014722, 0.93548378, 0.92370304])
for i in range(len(Spectrum_bins)):
    for j in range(len(P)):
        if Q[j] !=0:
            s= (P[j])*np.log((Q[j])/np.log(P[j]))
            print(s)`

【问题讨论】:

    标签: python-3.x numpy


    【解决方案1】:

    因为 P 的值都低于 1,所以 np.log(P[j]) 的值是负数。数学上不可能找到负数的对数,因此 numpy 返回 nan(非数字)。 这是第一个错误的来源。

    为了解决您的第二个问题,我假设您将等式更改为

    np.log(np.log(P[j])/np.log(P[j]))
    

    这将导致自然对数 1,等于 0。这是一个实数,因此不会返回错误。

    【讨论】:

    • 为了克服这个错误,我应该实现条件 if Q[j]>1 and P[J]>1: 吗?因为在这种情况下,我只考虑正值。
    • @jerry 我不确定你需要实现什么,但只返回真实值,那么条件应该是 Q[j] > 0 & P[j] > 1
    • 我想确保为了克服上述警告 Q[j] >1 和 P[j]>1 是我们需要实现的唯一条件。
    • 是的,这将防止 s 出现任何负值
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多