首页
学习
活动
专区
圈层
工具
发布

滤波波
EN

Stack Overflow用户
提问于 2022-02-11 02:54:37
回答 2查看 159关注 0票数 0

我试图编写一个函数filter_wave(wave,1),这将产生一个新的波动,这是一个平滑版本的输入波。遵循以下规则:

在新的波中,对于每一个位置i,它是原波三个位置的加权和。具体来说,i位置中的新的波值将等于

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2022-02-11 03:02:03

有更好的方法来做到这一点,但这是平行于你的选择。

代码语言:javascript
复制
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_wave

Alternative,它处理循环外的端点,从而使循环更简单:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2022-02-11 04:17:09

我不知道这能不能用。

代码语言:javascript
复制
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_wave
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71074825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档