我想我知道关于十进制表示形式的概念以及诸如this,this和this之类的相关问题以及建议的documentation。 / p>
仍然令我惊讶的是,在Python3中,round()
有时返回一个整数(根据documentation),有时还会返回一个浮点数(对我),取决于其 first 参数的类型的显着差异。
我了解到,例如floor()
或ceil()
总是返回浮点数,当然我发现round(x, digits)
返回整数或浮点数是合理的取决于是否指定了第二个参数digits
,甚至存在round
的不同实现(例如builtin
和numpy
)。
具体来说,以下代码显示了float32
和numpy.float32
使round()
返回不同的类型:
>>> x=101/100
>>> x
1.01
>>> import numpy as np
>>> nx=np.float32(x)
>>> nx
1.01
>>> round(x)
1
>>> round(nx)
1.0
出于好奇,我得到了x
值作为Keras中分类模型的预测,并且需要通过四舍五入到最接近的整数来从中获取索引,以从中选择正确的标签字符串列表。
并且在StackOverflow / Stackexchange中进行搜索并没有显示此问题已得到处理。请给我一个有用的链接,以防万一。
更具体地说,我从神经网络分类器中获得了预测值,即接近0或1的数字或另一个整数,并希望将其用作索引以打印与预测相关的正确标签(这几乎是基本需求)。
解决方案非常简单,尽管很丑陋:int(round(x))
(也介绍了here);但我仍然认为这是解决不良行为的一种解决方法。
我知道为什么会这样工作问题不被理解,所以让我们问什么是从{中获取整数和标签的正确方法{1}}的价值,希望有人也能揭示此... ehm ...功能背后的有趣原理。
答案 0 :(得分:3)
round
委托给对象的__round__
方法。
In [367]: x = 123.34
In [368]: x.__round__()
Out[368]: 123
In [369]: np.float64(x).__round__()
Out[369]: 123.0
显然,此numpy回合返回匹配的类型
In [376]: type(np.float(x).__round__())
Out[376]: int
In [377]: type(np.float32(x).__round__())
Out[377]: numpy.float32
In [378]: type(np.float64(x).__round__())
Out[378]: numpy.float64
In [379]: type(np.int32(x).__round__())
Out[379]: numpy.int32
因此,如果int(round(x))
是numpy浮点数之一,那么x
可能是确保整数的最干净的方法。