ShiC的自习室 2021-10-18 10:07 采纳率: 50%
浏览 119
已结题

python中多次调用同一个函数,不同形参,输出结果为什么没变化

这里我调用了两次bandpass函数,实现对原数据进行带通滤波,目的是得到从一个原数据data中得到三个不同频带的数据,但是结果出来却相同的并且是错的,而这三个各自单独调用一次(即注释掉另外两个bandpass的调用)的时候又都是对的,难道是python自动保存了什么数据没清空吗?还是什么原因,实在想不明白,请大家帮忙解答,万分感谢!

def bandpass(data, f1, f2, step, sfreq):
    wn1 = 2*f1/sfreq
    wn2 = 2*f2/sfreq
    redata = data
    #带通滤波
    for subject in redata:
        for session in redata[subject]:
            for channel in redata[subject][session]:
                for event in range(len(redata[subject][session][channel])):
                    #带通滤波
                    [b, a] = signal.butter(step, [wn1, wn2], 'bandpass')  #8
                    data_bandpass = signal.filtfilt(b, a, redata[subject][session][channel][event])
                    redata[subject][session][channel][event] = data_bandpass
    return redata

if __name__ == "__main__":
    data = np.load('data.npy', allow_pickle=True).item()
    sfreq = 250
    data_bandpass47 = bandpass(data=data, f1=4, f2=7, step=4, sfreq=sfreq)
    data_bandpass813 = bandpass(data=data, f1=8, f2=13, step=8, sfreq=sfreq)
    data_bandpass1332 = bandpass(data=data, f1=13, f2=32, step=12, sfreq=sfreq)
  • 写回答

1条回答 默认 最新

  • 於黾 2021-10-18 10:26
    关注

    你在函数里执行了
    redata = data
    然后又修改了redata
    redata[subject][session][channel][event] = data_bandpass
    那么其实你就修改了data,因为data是引用类型,不是值
    如果你不想修改原数组,你需要redata = data.clone()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月26日
  • 已采纳回答 10月18日
  • 创建了问题 10月18日

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型