2011-08-10 13 views
3

私は人の年齢が小さい(月、週)増分のシミュレーションを実行しています。しかし、私は、一貫していない年齢間隔で危険があります。その年齢のために危険を抽出する目的のために(最も近い年齢グループに任意の時点で私の年齢を丸くするための簡単な/効率的な方法はありますか?Pythonで指定された数値に丸めます

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

は、あなたの危険年齢間隔の例を挙げてもらえますか?それぞれの個人がどのハザードグループに該当するのかを特定したいと思うように思えますが、あなたが与えた情報からは分かりません。 –

答えて

3

私はあなたが年齢を持っていると仮定し、そのような0.5、5、6、10、32、32.5、電気ショック療法あなたが持っているage_groups配列に分類する必要があるとして

。これは簡単な1ライナーです:)

は、あなたが持っていると仮定:

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

これはベクトル化しないことに注意してください。大きな配列をブロードキャストして作成しない限り、searchutortedでunutbuの答えは効率的なベクトル化バージョンです。 – 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 
関連する問題