python - 数值计算中的意外结果 - (在 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)
我真的很震惊。我无法理解发生了什么。如果我只是手动输入数字,我可以计算结果。但是如果我用计算方法来做,我会得到一个错误???
解决方案
好吧,它们看起来一样,但它们不一样,代码如下:
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)
推荐阅读
- javascript - 返回最短的单词
- android - 位图未在 canvas-android 上绘制
- html - 如何在父元素剪辑路径清除的区域顶部显示子 HTML 元素?
- swift - 在 ObservableObject 中调用多个函数
- python - Python pandas timedelta64 fillna
- amazon-web-services - AWS SNS OTP 电子邮件
- flutter - 颤振 - 查看 .pub-cache 文件给出请求 textDocument/documentSymbol 失败
- github - 不要触发将新分支推送到远程的操作
- reactjs - 无法从 GetMapping 获取数据 - 类组件
- hyperledger-fabric - 部署链码失败(Ubuntu 18.04 fabric-sample)