2011-08-10 21 views
3

我正在運行一個模擬,其中人們以小(月,周)增量年齡。但是,我有不一致的年齡段的危險。有(圓我這個年齡隨時就近年齡組提取的危害針對該年齡段的目的的簡單/有效的方式?回到給定的數字在Python

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

你能給你的危險年齡區間的例子嗎?這聽起來像你想要確定每個人適合哪些危險羣體,但我無法從你提供的信息中完全知道。 –

回答

3

我假設你有年齡等。5,5,6,10,32,32.5,ECT需要落入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陣列和年齡你想圓:)

+0

請注意,這不會矢量化,除非您廣播並創建一個大數組,unutbu的searchsorted的答案是高效的矢量化版本。 – user333700

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 
相關問題