Python: выберите n чисел из отсортированного массива, убедившись, что они находятся как можно дальше друг от друга - PullRequest
0 голосов
/ 14 июля 2020

Допустим, у меня есть следующий массив:

myarr = np.array([0, 4, 3, 6, 12, 9, 17, 86])

и мне нужно выбрать n>=2 чисел из этого массива, чтобы их разница представляла максимально возможную разницу. В моем примере я сначала отсортирую массив от наименьшего к наибольшему:

myarr_s = np.sort(myarr) = array([0, 3, 4, 6, 9, 12, 17, 86])

Теперь, если n=2, я бы выбрал 0, 86, потому что их разница - это максимальная разница, возможная в массиве. Я ищу способ pythoni c сделать это в ситуациях, когда n>2.

Чтобы дать вам дополнительный пример, если бы мой массив был np.arange(0,101,1) и n=5, мой выбор должен был бы быть 0, 25, 50, 75, 100.

1 Ответ

1 голос
/ 14 июля 2020

Вы можете разделить отсортированный массив на n-1 равных частей и выбрать края. Затем найдите ближайшие числа к этим краям в вашем массиве

def foo(a, n): 
     _a = np.sort(a) 
     ret = np.zeros(n) 
     ret[0], ret[-1] = _a[0], _a[-1] 
     if n==2: 
         return ret 
     midvals = [ret[0]+i*(ret[-1]-ret[0])/(n-1) for i in range(1, n-1)] 
     def closest(arr, val): 
         diff = [abs(v-val) for v in arr] 
         return arr[np.argmin(diff)] 
     for i,v in enumerate(midvals): 
         ret[i+1] = closest(a, v) 
     return ret 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...