首页 > 解决方案 > 数值计算中的意外结果 - (在 double_scalar 中遇到无效值)

问题描述

from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1 + z) / ln(1 + k)
y = 1/5
print("The x=", x)

Q = x**y

print(Q)

结果是

The x= -0.26185950714291484
c:\Users\-\Desktop\... RuntimeWarning: invalid value 
encountered in double_scalars
  Q = x**y
nan

我很难理解这里的问题。很明显,我可以打印x,但我无法使用它。

同时,当我将代码编写为

x = -0.26185950714291484
y = 1/5
print("The x=", x)
Q = x**y

print(Q)

我明白了

The x= -0.26185950714291484
(0.6188299348758349+0.44960626529008196j)

我真的很震惊。我无法理解发生了什么。如果我只是手动输入数字,我可以计算结果。但是如果我用计算方法来做,我会得到一个错误???

标签: pythonmathnumbersnumeric

解决方案


好吧,它们看起来一样,但它们不一样,代码如下:

from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1 + z) / ln(1 + k)
y = 1/5
print("The x=", x)

Q = x**y

print(Q)

您有一个类型为 'x' 的变量<class 'numpy.float64'>,而使用:

x = -0.26185950714291484
y = 1/5
print("The x=", x)
Q = x**y

print(Q)

变量“x”的类型为<class 'float'>

然后,您使用不同类型的值应用幂运算,即 <type one of type 'numpy.float64'>(即,'x')和另一个类型为 <class 'float'>(即,'y')。您想要避免的问题是将 'x' 转换为 float 很好:

from numpy import log as ln
z = 3
k = 2

x = 1 - ln(1 + z) / ln(1 + k)
y = 1/5

Q = float(x)**y

print(Q)

输出:

(0.6188299348758349+0.44960626529008196j)

推荐阅读