前天的一次数据试验,由于没有搞懂Python中除法的性质,导致浪费了一个上午的时间在那里纠结,汗。。。
数据试验的背景是想研究一下如下函数变化的性质,并将其可视化
Y= (A-B)/(A+B)
初步的想法是利用Python产生随机数来进行模拟试验,首先固定“A+B”的值,如A+B=1000来尝试研究一下在B变化的情况下,Y和B的关系,其实这个关系非常简单,当A+B固定后,“A-B”可以表达为“A+B”-2B。很明显这个时候B和Y是一个简单的线性关系。理论上已经知道了结果了,开始尝试代码实现吧,哪知结果出乎预料。
这是什么鬼,如此之完美的逻辑回归分类函数?是不是让你想到了Sigmoid函数图像。
通过输出Y值,能看到除了0就是-10,这明显是除法数值被取整了呀,那问题到底出在那里呢?以前使用Python做运算的时候,并没有遇到类似的问题。难道又是因为数据维度的问题?尝试了各种随机数产生的方法,有时候会是线性函数,有时候就如上图。百思不得其解(请原谅一个刚刚学习编程的老年人的对语言的认知水平)
通过查询,原来Python的除法分为Ture除法和floor除法,在3.0版以前的Python中的除法跟数的类型相关,如果是两个整数相除,程序执行的是floor除法,自动将结果取整。如果运算中包含了浮点数,程序则执行true除法,会获得精确的除法结果。3.0以后的版本中的除法则不与参与除法的数据的类型相关,一律采用true除法。想要让3.0版以前的Python执行true除法,需要在做运

在进行数据试验时,发现Python除法结果有时会被取整,导致预期的线性关系变为分类函数。问题源于Python的True除法和Floor除法。在Python 3.0之前,整数相除执行Floor除法,而包含浮点数时执行True除法。Python 3.0及以后版本默认执行True除法。为避免整数除法取整,需导入除法功能。修正后,得到了预期的线性函数关系,并通过三维可视化进一步展示了这种关系。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



