在Python中按指定数字取整

3 投票
3 回答
1554 浏览
提问于 2025-04-16 23:18

我正在进行一个模拟,在这个模拟中,人们的年龄是以小的单位(比如月、周)逐渐增加的。不过,我在不同的年龄段中有一些不一致的风险。请问有没有简单有效的方法,可以在任何时候把我的年龄四舍五入到最近的年龄组,以便提取该年龄段的风险?

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

3 个回答

0

你可能想把这些元素分成几组,通常可以用一种叫做 k-均值 的算法来实现。这里有一些相关的答案:Python k-均值算法

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

我假设你有一些年龄,比如0.5、5、6、10、32、32.5等等,这些年龄需要放入你已有的年龄组数组中。

这个问题其实很简单,只需要一行代码就能解决 :)

假设你有:

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()]

把那行代码放到一个函数里,传入年龄组数组和你想要四舍五入的年龄就可以了 :)

撰写回答