likes
comments
collection
share

《番外篇之numpy.around()函数失灵🚀》

作者站长头像
站长
· 阅读数 58

前言

事情是这样的,最近在学习NumPy库的时候,并且学习到<数学函数>这节课程的时候,因为没有看视频的缘故吧!完全就是看文本教程进行学习的,所以就出现了一个问题非常的困扰,究竟是什么呢》下面我们进行一下仔细的分析,也以此记录这个问题,希望能够帮助到刚刚学习到这里的童鞋们吧!

🍾 起因

在学习数学函数这节课程的时候呢?在编辑器中进行around()函数调用的时候发现得出的结果怎么和自己预想的不一样呢?

先说一下around()函数的格式和调用方法:

函数格式: numpy.around(a,decimals) ,函数的概念就是返回指定数字的四舍五入值,其中包含两个参数,第一个参数a,就是我们要四舍五入的元素值,第二个参数decimals是要舍入的小数位数,如果不写的话,默认值是0,如果是负数的话,会四舍五入到小数点左侧的位置。

在测试这个函数的过程当中,主要问题就出现在当decimals参数是负1的时候,返回的值有些苦恼我们一起来看一下。

🍯 缘由

实例代码:

# 这里引入NumPy库
import numpy as np

# 调用around函数并将decimals参数赋值为-1
print(np.around(4.12, decimals=-1))

# 输出结果
# 0.0

咿?奇怪了,按照我们正常的逻辑的理解返回不应该是4吗?怎么到最后输出的结果是0.0呢? 是不是很疑惑,估计有一部分人也会疑惑,大神应该知道怎么回事儿吧!

🥘 结果

最终呢,经过多番的查询和验证得出结果是因为:NumPy库在计算的时候的底层原理是先将pyhton代码编译成二进制代码,然后在调用计算方法的。

decimals=-1 时,表示要四舍五入到最接近的10的倍数

因此,print(np.around(4.12, decimals=-1))将4.12四舍五入到最近的10的负一次方(即0.1)的整数倍,结果为0.0。这是因为小数点左侧最接近0.1的整数是0,所以四舍五入后结果为0.0

接下来我们再写个用例进行测试一番。

🥣实例代码:

print(np.around(5.1, decimals=-1))

# 输出结果
#10.0

请看上述代码,5.1调用函数以后,返回的元素值是10.0,因为距离5.1最近的10的整数倍是10,所以值为10.0

我们再测试一个两位数的,相关代码如下:

print(np.around(17.2, decimals=-1))

# 输出结果
# 20.0

没问题!跟原理说的内容是符合的,原来并不是说函数失灵或者编译问题,而是底层的计算逻辑在作祟呀🤣🤣🤣!

刚好碰到了这个问题,记录一下,希望能够帮助也在这里卡住的你😉。

转载自:https://juejin.cn/post/7369270223868788799
评论
请登录