在 Python 中舍入到给定的数字

Posted

技术标签:

【中文标题】在 Python 中舍入到给定的数字【英文标题】:Round to a given number in Python 【发布时间】:2011-10-24 05:35:28 【问题描述】:

我正在运行一个模拟,其中人们以小(月、周)的增量老化。但是,我在不一致的年龄间隔中有危险。是否有一种简单/有效的方法可以随时将我的年龄四舍五入到最接近的年龄组(为了提取该年龄的危险?

age_groups = np.array([0, .01, .1, 5, 10, 15, 20, 25, 30, 35, 40])

【问题讨论】:

您能否举例说明您的危险年龄区间?听起来您只想确定每个人适合哪些危险组,但从您提供的信息中我无法完全判断。 【参考方案1】:

我假设您的年龄为 0.5、5、6、10、32、32.5 等。需要落入您拥有的 age_groups 数组中。

这是一个简单的单行:)

假设你有:

age_groups = np.array([0, .01, .1, 5, 10, 15, 20, 25, 30, 35, 40])
age = .5

解决办法是:

nearest_age = age_groups[(np.abs(age_groups-age)).argmin()]

将该行放入一个函数中,将 age_groups 数组和您想要四舍五入的年龄传递给它:)

【讨论】:

请注意,这不会向量化,除非您广播并创建一个大数组,否则 unutbu 的 searchsorted 答案是有效的向量化版本。【参考方案2】:

假设您要将年龄分组到由age_groups 定义的箱中。 然后你可以使用np.searchsorted找到每个年龄段属于哪个年龄段:

import numpy as np

ages=np.array([0,0.05,1,3,5,10,13,19,25,35])

age_groups = np.array([0, .01, .1, 5, 10, 15, 20, 25, 30, 35, 40])

index=age_groups.searchsorted(ages,side='left')
for age,nearest_age in zip(ages,age_groups[index]):
    print('a --> n'.format(a=age,n=nearest_age))

产量

0.0 --> 0.0
0.05 --> 0.1
1.0 --> 5.0
3.0 --> 5.0
5.0 --> 5.0
10.0 --> 10.0
13.0 --> 15.0
19.0 --> 20.0
25.0 --> 25.0
35.0 --> 35.0

【讨论】:

【参考方案3】:

您可能希望使用k-mean 算法对这些元素进行聚类,以下是一些答案:Python k-means algorithm

【讨论】:

以上是关于在 Python 中舍入到给定的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中舍入到最接近的 3 倍数? [复制]

如何在 PL-SQL 中舍入数字?

如何在 JavaScript 中舍入一个数字? .toFixed() 返回一个字符串?

如何将值向上舍入到一个数字的最接近的因子[重复]

在 Python 2 中使用逗号分隔符格式化数字并舍入到小数点后 2 位?

如何在 R 中舍入包含一些字符变量的 data.frame?