首页 > 解决方案 > 如何编写无循环代码来找到每个区域的最大值?

问题描述

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 循环找到每个区域中的最大值来计算每个区域中的最大值。有没有无循环的方法来做到这一点?

标签: pythonarraysmax

解决方案


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

推荐阅读