《番外篇之numpy.around()函数失灵🚀》
前言
事情是这样的,最近在学习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