在Python中将数字舍入到指定位数

3

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

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

1
你能举个例子说明你的危险年龄间隔吗?听起来你只是想确定每个人属于哪个危险组,但我无法从你提供的信息中确定。 - Lee Netherton
3个回答

3

我假设您有如下年龄: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数组和你想要四舍五入的年龄作为参数传递给它 :)

请注意,除非您进行广播并创建一个大数组,否则这不是向量化的。与searchsorted相结合的unutbu的答案是高效的向量化版本。 - Josef

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接