2017-11-16 12 views
2

私はまたはを最も近いビンに丸めていくために必要な収入のリストを持っています。最も近いビンに丸めます

import numpy as np 
bins = np.array([9.95,19.95,79.95]) 

と私はこのようないくつかの料金があります:たとえば

、製品のみが販売した場合のコストは、次の私は間違いなく、最も近いソリューションである、this exampleに続い

x = np.array([6.68, 9.20, 12.5, 18.75, 21.59]) 

を:

y = np.take(bins,np.digitize(x,bins)) 

私は残していると考えましたright=パラメータnp.digitizeのデフォルトへのrは私が必要なものを達成だろうが、結果はまだ切り上げされています

In [10]: y 
Out[10]: array([ 9.95, 9.95, 19.95, 19.95, 79.95]) 

を私の特定のケースでは、私は、最寄りのビンまでまたはを切り上げする必要があります。たとえば、$ 12.50の課金は$ 9.95からわずか2.55ドルですが、選択したオプション$ 19.95は$ 7.45です。

EDIT

私がリンクされ、溶液中の1つの答えは両方をアップ/ダウン丸めることができますが、この方法は、したがって、この新しいポスト、一貫性のない結果を返すことができることが表示されます。

+0

を与える...私はコメントはそれが一貫性のない結果を生成言及しているため、そのソリューションを実装するのを警戒しました。 – measureallthethings

答えて

2

特定の値に丸めたい場合は、中点で分割する必要があります。これと同じように:

import numpy as np 

bins = np.array([9.95,19.95,79.95]) 
centers = (bins[1:]+bins[:-1])/2 

x = np.array([6.68, 9.20, 12.5, 18.75, 21.59]) 
res = bins[np.digitize(x, centers)] 

がいることを指摘してくれてありがとう@RNar

array([ 9.95, 9.95, 9.95, 19.95, 19.95]) 
関連する問題