Как написать код без петель, чтобы найти максимум в каждом регионе? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть вектор, который определяет количество областей от 1 до N. Например, если

  A = [1,2,3,6,7,9,10]

Тогда регионы [1,3], [6,7], [9,10] определены в интервале [1,10] с N=10. У меня есть другой вектор длиной N, который содержит набор положительных и отрицательных чисел:

 x = [0.8,0.1,1,-1,-2,-0.76,0.1,0.2,0.9,0.6]

Я хочу найти максимальное значение x в каждом регионе. В этом примере результат:

 y = [1,0.1,0.9]
 y_locs = [3,7,9]

Можно вычислить максимум в каждой области, сначала получив регионы из A, а затем используя цикл for, чтобы найти максимум в каждой области. Есть ли способ сделать это без петель?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы можете нарезать массив и использовать встроенную функцию max(). Что-то вроде:

x = [0.8, 0.1, 1, -1, -2, -0.76, 0.1, 0.2, 0.9, 0.6]

# each tuple contains (start_index, length, maximum_value)
max_list = [(0, 3, max(x[0:3])), (5, 2, max(x[5:7])), (8, 2, max(x[8:]))]
locations_list = [max_list[i][0] + x[max_list[i][0]:max_list[i][0] + max_list[i][1]].index(max_list[i][2]) + 1 for i in range(len(max_list))]
print(max_list)
print(locations_list)

Урожайность:

[(0, 3, 1), (5, 2, 0.1), (8, 2, 0.9)]
[3, 7, 9]

Примечания:

  • Я использовал цикл for для итерации каждого раздела, но вы могли бы развернуть его вручную в три отдельные строки, не имеющие цикла for (хотя это стало бы очень утомительно для больших данных)
  • Я не знаю внутренностей max(), и он может использовать скрытый цикл for.
...