数组中连续子序列的总和

ala*_*lae 4 python arrays algorithm

给出以下数组:

tab = [80,12,14,5,70,9,26,30,8,12,16,15]
Run Code Online (Sandbox Code Playgroud)

我想计算大小为4的所有可能序列的总和如下:

S1=80+12+14+5=111
S2=12+14+5+70 =101
S3=14+5+70+9 =98
....
Run Code Online (Sandbox Code Playgroud)

我已经在python上实现了一个简短的程序来执行此操作并且效率不高:

import numpy as np


tab= np.array([80,12,14,5,70,9,26,30,8,12,16,15])
tab_size=tab.size
n=tab_size
s=0
seq_len=5
for i in range (0,n-(seq_len-1),1):
    print("index i ",i)
    for k in range(i+1,(seq_len+i),1):
            print ("index k ", k)
            tab[i]=tab[i]+tab[k]
            s=s+1
print(s)         
tab
Run Code Online (Sandbox Code Playgroud)

结果如下:

array([111, 101,  98, 110, 135,  73,  76,  66,  51,  12,  16,  15])
Run Code Online (Sandbox Code Playgroud)

我注意到每个元素将参与总和操作4次,这是不好的.你有什么有效的想法吗?
我想补充一点,序列大小不固定,在这个例子中只是4.提前谢谢

Eri*_*nil 5

  • 计算S1完毕后,您只需要添加70并减去80即可S2.
  • 计算S2完毕后,您只需要添加9和减去12即可S3.
  • ...

这样,您将避免使用每个元素4次.