Вместо того, чтобы найти самую близкую точку, вы можете попробовать найти самую близкую в направлении x и y отдельно, а затем сравнить эти две, чтобы найти, что ближе, используя встроенную функцию min, как верхний ответ из этого вопроса. :
min(myList, key=lambda x:abs(x-myNumber))
из списка целых чисел, получить число, ближайшее к данному значению
EDIT:
Ваш цикл закончится примерно так, если вы сделаете все это одним вызовом функции. Кроме того, я не уверен, завершит ли функция min циклы сравнения массивов так, чтобы это заняло столько же времени, сколько и текущий код:
for k,m in np.nditer([point_x, point_y]):
min = min(compare_x, compare_y, key=lambda x,y: (x-k)**2 + (y-m)**2 )
Другой альтернативой может быть предварительное вычисление расстояния от (0,0) или другой точки, например (-1000,1000), для всех точек в массиве сравнения, сортировка массива сравнения на основе этого, затем только контрольные точки с аналогичным расстоянием от эталона.