import numpy as np
arr = np.array([0.23, 2.32, 4.04, 5.02, 6.84, 10.12, 10.34, 11.93,12.44])
def binary_search(arr, val):
i = np.searchsorted(arr, val)
if i in {len(arr), len(arr) - 1}:
return i - 1
elif np.isclose(arr[i], val):
return i
return i if abs(arr[i] - val) <= abs(arr[i + 1] - val) else i + 1
for case in [12.43, 0.5]:
print(binary_search(arr, case))
print(arr[binary_search(arr, case)])
aW1wb3J0IG51bXB5IGFzIG5wCgphcnIgPSBucC5hcnJheShbMC4yMywgMi4zMiwgNC4wNCwgNS4wMiwgNi44NCwgMTAuMTIsIDEwLjM0LCAxMS45MywxMi40NF0pCgpkZWYgYmluYXJ5X3NlYXJjaChhcnIsIHZhbCk6CiAgICBpID0gbnAuc2VhcmNoc29ydGVkKGFyciwgdmFsKQoKICAgIGlmIGkgaW4ge2xlbihhcnIpLCBsZW4oYXJyKSAtIDF9OgogICAgICAgIHJldHVybiBpIC0gMQogICAgZWxpZiBucC5pc2Nsb3NlKGFycltpXSwgdmFsKToKICAgICAgICByZXR1cm4gaQoKICAgIHJldHVybiBpIGlmIGFicyhhcnJbaV0gLSB2YWwpIDw9IGFicyhhcnJbaSArIDFdIC0gdmFsKSBlbHNlIGkgKyAxCgpmb3IgY2FzZSBpbiBbMTIuNDMsIDAuNV06CiAgICBwcmludChiaW5hcnlfc2VhcmNoKGFyciwgY2FzZSkpCiAgICBwcmludChhcnJbYmluYXJ5X3NlYXJjaChhcnIsIGNhc2UpXSk=