Hes*_*e34 9 python matlab numpy
我是一个广泛使用MATLAB的Python新手.我正在转换一些log2在MATLAB 中使用的代码,我使用了NumPy log2函数,得到的结果与我预期的这么小的数字不同.我很惊讶,因为数字的精确度应该相同(即MATLAB double vs NumPy float64).
a = log2(64);
--> a=6
Run Code Online (Sandbox Code Playgroud)
import math
a = math.log2(64)
--> a = 6.0
Run Code Online (Sandbox Code Playgroud)
import numpy as np
a = np.log2(64)
--> a = 5.9999999999999991
Run Code Online (Sandbox Code Playgroud)
import numpy as np
a = np.log(64) / np.log(2)
--> a = 6.0
Run Code Online (Sandbox Code Playgroud)
因此,本机NumPy log2函数会产生导致代码失败的结果,因为它检查数字是2的幂.预期结果正好是6,本机Python log2函数和修改后的NumPy代码都使用了对数的属性.我是否在使用NumPy log2功能做错了什么?我现在改变了代码以使用原生Python log2,但我只是想知道答案.
没有.代码没有任何问题,只是因为我们的计算机上无法完美地表示浮点数.在检查浮点值时,始终使用epsilon值来允许一系列错误.阅读浮点指南和这篇文章了解更多信息.
编辑 - 正如cgohlke在评论中指出的那样,
根据用于构建numpy的编译器,np.log2(x)由C库计算或者为1.442695040888963407359924681001892137*np.log(x)请参阅此链接.
这可能是错误输出的原因.
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |