首页 文章

Python NumPy log2 vs MATLAB

提问于
浏览
9

我是一个广泛使用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 log2 函数和修改后的NumPy代码都给出了使用对数的属性 . 我是否在使用NumPy log2 功能做错了什么?我现在更改了代码以使用原生Python log2 ,但我只是想知道答案 .

1 回答

  • 7

    没有 . 代码没有任何问题,只是因为我们的计算机上无法完美地表示浮点数 . 在检查浮点值时,始终使用epsilon值来允许一系列错误 . 阅读The Floating Point Guidethis帖子了解更多信息 .

    EDIT - 正如cgohlke在评论中指出的那样,

    根据用于构建numpy的编译器,np.log2(x)由C库计算或者为1.442695040888963407359924681001892137 * np.log(x)请参阅此链接 .

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

相关问题