我有一个看起来像这样的数组:
testdata = [-2, -1, 0, 1, 2, 3, 10, 3, 2, 1, 0, -1, -2]
所以它有一个最大值,并且向左和向右,值逐渐下降到零,然后它的值可以低于 0。
我的代码的目的是找到数组的最大值,并将其左右的所有值相加,直到值 0(包括最大值)。
为了测试我的代码,我生成了一个更大的数组,如下所示(忽略可能小于 0 的值):
data1 = [x for x in range(0, 100000, 1)]
data2 = [x for x in range(100000, -1, -1)]
data3 = data1 + data2
我能想到的最快的代码如下所示:
j = 1
k = 0
max_index = np.where(data3 == np.amax(data3))[0][0]
while data3[max_index + j] > 0:
j += 1
while data3[max_index - k] > 0:
k += 1
summ1 = np.sum(data3[max_index:(max_index+j)])
summ2 = np.sum(data3[(max_index-k):max_index])
total = summ1 + summ2
print(total)
关于如何更快地提高这一点有什么建议吗?
海绵宝宝撒
红颜莎娜
相关分类