如何编写无循环代码以在每个区域中找到最大值?

时间:2019-04-08 21:14:10

标签: python arrays max

我有一个向量,用于指定1N上的多个区域。例如,如果

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

然后在[1,10]N=10的时间间隔内定义区域[1,3],[6,7],[9,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 :(得分:0)

您可以切片数组并使用内置的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循环。