我试图编写一个函数filter_wave(wave,1),这将产生一个新的波动,这是一个平滑版本的输入波。遵循以下规则:
在新的波中,对于每一个位置i,它是原波三个位置的加权和。具体来说,i位置中的新的波值将等于
new_wave[i] = wave[i-1] * 0.2 + wave[i]*0.6 + wave[i+1]*0.2其中一些条件:
len(wave)成为L。该方法将访问原始波中不存在的wave[-1]和wave[L]。因此,您可以将wave[-1]和wave[L]的值视为wave[-1]和wave[L],新浪潮中的数字将是整数。我编写了以下代码,但不确定问题到底是什么,因为程序一直在返回0
def filter_wave(wave,times):
new_wave = []
for i in range(len(wave)):
if wave[i-1] < wave[0]:
return 0
if wave[i+1] > len(wave):
return 0
new_wave = wave[i-1] * 0.2 + wave[i]*0.6 + wave[i+1]*0.2
new_wave.insert(i,int(new_wave))
return new_wave发布于 2022-02-11 03:02:03
有更好的方法来做到这一点,但这是平行于你的选择。
def filter_wave(wave,times):
new_wave = []
for i in range(len(wave)):
if i == 0:
prev = 0
else:
prev = wave[i-1]
if i+1 >= len(wave):
nxt = 0
else:
nxt = wave[i+1]
new_wave.append( prev * 0.2 + wave[i] * 0.6 + nxt * 0.2 )
return new_waveAlternative,它处理循环外的端点,从而使循环更简单:
def filter_wave(wave,times):
new_wave = []
new_wave.append( wave[0] * 0.6 + wave[1] * 0.2 )
for i in range(1, len(wave)-1):
new_wave.append( wave[i-1] * 0.2 + wave[i] * 0.6 + wave[i+1] * 0.2 )
new_wave.append( wave[-2] * 0.2 + wave[-1] * 0.6 )
return new_wave发布于 2022-02-11 04:17:09
我不知道这能不能用。
def filter_wave(wave, times):
L = len(wave)
new_wave = []
for i in range(times):
for j in range(L):
if j == 0: #wave[-1] = 0
new_wave[j] = int(wave[j] * 0.6 + wave[j + 1] * 0.2)
elif j == L - 1: #wave[L] = 0
new_wave[j] = int(wave[j - 1] * 0.2 + wave[j] * 0.6)
else:
new_wave[j] = int(wave[j - 1] * 0.2 + wave[j] * 0.6 + wave[j + 1] * 0.2)
return new_wavehttps://stackoverflow.com/questions/71074825
复制相似问题