我有一份收入费用 list ,需要将它们或四舍五入到最近的垃圾箱。
例如,如果仅售出的产品成本如下:
import numpy as np
bins = np.array([9.95,19.95,79.95])
我有一些这样的指控:
x = np.array([6.68, 9.20, 12.5, 18.75, 21.59])
我关注了this example ,这绝对是最接近的解决方案:
y = np.take(bins,np.digitize(x,bins))
我认为将 right=
参数保留为 np.digitize
的默认值会完成我需要的,但结果仍然四舍五入:
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 美元相差。
编辑
虽然我链接到的解决方案中的一个答案可以向上/向下舍入,但似乎该方法可以返回不一致的结果,因此这篇新帖子。
最佳答案
如果您想舍入到某些值,您需要在它们的中点处拆分。像这样:
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)]
给予
array([ 9.95, 9.95, 9.95, 19.95, 19.95])
关于python - 舍入到最近的 bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47337605/