Python部门
我试图从-100到0范围内的一组数字规范化到10-100的范围,并且只是注意到即使没有variables也没有评估我期望的方式:
>>> (20-10) / (100-10) 0
浮动部门也不工作:
>>> float((20-10) / (100-10)) 0.0
如果师的任何一方被施放到一个浮体上,它将会工作:
>>> (20-10) / float((100-10)) 0.1111111111111111
第一个例子中的每一个方面都是作为一个整数进行求值,这意味着最终的答案将被转换为一个整数。 由于0.111小于.5,所以它变成0.我认为这是不透明的,但是我猜这就是这样。
什么是解释?
您正在使用Python 2.x,其中整数部分将截断,而不是成为一个浮点数。
>>> 1 / 2 0
你应该让他们中的一个float
:
>>> float(10 - 20) / (100 - 10) -0.1111111111111111
或from __future__ import division
,这部队/
采取Python 3.x的行为,总是返回一个浮动。
>>> from __future__ import division >>> (10 - 20) / (100 - 10) -0.1111111111111111
你把整数,所以Python是给你一个整数回来 :
>>> 10 / 90 0
如果你把这个浮点数转换成浮点数,那么舍入已经完成了,换句话说,0整数总是变成0浮点数。
如果你在分区的任何一边都使用浮点数,那么Python会给你所期望的答案。
>>> 10 / 90.0 0.1111111111111111
所以在你的情况下:
>>> float(20-10) / (100-10) 0.1111111111111111 >>> (20-10) / float(100-10) 0.1111111111111111
您需要将其更改为浮动,然后再进行除法。 那是:
float(20 - 10) / (100 - 10)
它与你使用的Python版本有关。 基本上它采用了C的行为:如果你分两个整数,结果将被舍入到一个整数。 另外请记住,Python从左到右执行操作,当您进行types转换时会起到一定的作用。
例子:由于这是一个问题,当我正在进行算术运算(我应该将其转换为浮点数和哪个数字)时,总会在我脑海中popup一个问题,这个问题的一个例子就是:
>>> a = 1/2/3/4/5/4/3 >>> a 0
当我们划分整数时,不足为奇的是它变得更低。
>>> a = 1/2/3/4/5/4/float(3) >>> a 0.0
如果我们将最后一个整数转换为浮点数,我们仍然会得到零,因为在我们的数字被浮点除数的时候,由于整数除法已经变成了0。
>>> a = 1/2/3/float(4)/5/4/3 >>> a 0.0
与上面的情况相同,但将浮点types转移更靠近左侧。
>>> a = float(1)/2/3/4/5/4/3 >>> a 0.0006944444444444445
最后,当我们将第一个整数浮点型化时,结果就是所需的结果,因为从第一个分割开始,即最左边的一个,我们使用浮点数。
额外1:如果您正试图回答这个问题以改善算术评估,您应该检查这一点
额外2:请注意以下情况:
>>> a = float(1/2/3/4/5/4/3) >>> a 0.0
在Python 2.7中,如果input是整数,则/
运算符是整数除法:
>>>20/15 1 >>>20.0/15.0 1.33333333333 >>>20.0/15 1.33333333333
在Python 3.3中,即使input是整数, /
运算符也是一个浮点除法。
>>> 20/15 1.33333333333 >>>20.0/15 1.33333333333
对于Python 3中的整数除法,我们将使用//
运算符。
//
运算符是Python 2.7和Python 3.3中的整数除法运算符。
在Python 2.7和Python 3.3中:
>>>20//15 1
现在看比较
>>>a = 7.0/4.0 >>>b = 7/4 >>>print a == b
对于上面的程序,Python 2.7中输出为False,Python 3.3中输出为True。
在Python 2.7 a = 1.75和b = 1。
在Python 3.3 a = 1.75和b = 1.75,只是因为/
是一个浮点数。
至less使其中一个浮动,那么它将是浮动除法,而不是整数:
>>> (20.0-10) / (100-10) 0.1111111111111111
将结果投入浮动太晚了。
通过放置'。'指定一个浮点数 之后的数字也会导致它默认浮动。
>>> 1 / 2 0 >>> 1. / 2. 0.5
无论哪种方式,它是整数除法。 10/90 = 0.在第二种情况下,你只是将0赋值为一个浮点数。
尝试将“/”的一个操作数转换为float:
float(20-10) / (100-10)
在你的第二个例子中已经发生分裂之后,你正在投射。 尝试这个:
float(20-10) / float(100-10)
我有些惊讶,没有人提到原来的海报可能会喜欢合理的数字。 如果您对此感兴趣,那么基于Python的程序Sage就会回来 。 (目前仍然基于Python 2.x,但3.x正在进行中。)
sage: (20-10) / (100-10) 1/9
这不是每个人的解决scheme,因为它确实做了一些准备工作,所以这些数字不是int
s,而是Sage Integer
类元素。 仍然值得一提的是Python生态系统的一部分。
就我个人而言,我最好在最开始插入一个1. *
。 所以expression就变成这样了:
1. * (20-10) / (100-10)
正如我总是做一些公式一样:
accuracy = 1. * (len(y_val) - sum(y_val)) / len(y_val)
所以不可能像20.0
一样简单地添加一个.0
。 而在我的情况下,用float()
包装可能会失去一点可读性。