Python NumPy log2 vs MATLAB

时间:2013-07-17 14:08:55

标签: python matlab numpy

我是一个广泛使用MATLAB的Python新手。我正在转换一些在MATLAB中使用log2的代码,并且我使用了NumPy log2函数,得到的结果与我预期的这么小的数字不同。我很惊讶,因为的精度应该相同(即MATLAB double vs NumPy float64)。

MATLAB代码

a = log2(64);

--> a=6

基础Python代码

import math

a = math.log2(64)

--> a = 6.0

NumPy代码

import numpy as np

a = np.log2(64)

--> a = 5.9999999999999991

修改后的NumPy代码

import numpy as np

a = np.log(64) / np.log(2)

--> a = 6.0

因此,本机NumPy log2函数会产生一个导致代码失败的结果,因为它检查的数字是2的幂。预期结果正好是6,这是本机Python { {1}}函数和修改后的NumPy代码使用对数的属性。我是否在使用NumPy log2功能做错了什么?我现在更改了代码以使用原生Python log2,但我只是想知道答案。

1 个答案:

答案 0 :(得分:7)

没有。代码没有任何问题,只是因为浮点数无法在我们的计算机上完美呈现。在检查浮点值时,始终使用epsilon值来允许一系列错误。阅读The Floating Point Guidethis帖子以了解详情。

编辑 - 正如cgohlke已在评论中指出,

  

取决于用于构建numpy的编译器np.log2(x)由C库计算或1.442695040888963407359924681001892137 * np.log(x)请参阅this链接。

这可能是错误输出的原因。