我有一个向量,用于指定1
至N
上的多个区域。例如,如果
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循环在每个区域中找到最大值来计算每个区域中的最大值。有无循环的方法吗?
答案 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]
注意:
max()
的内部,它可能会使用隐藏的for循环。