2017-06-06 94 views
1

我的第一篇文章在这里。Python中的奇怪变量行为

所以我加载数据到一个名为f1_data变量,然后将它传递给pm.removeDC()函数做一些信号处理,并将结果保存到同一个变量。但是,然后,我想只替换第8列,与原始f1_data,我打电话raw_data,我无法弄清楚为什么它不起作用。这里是功能。帮助任何人?

文件pm.py

def removeDC(data):  
    # define the filter 
    butter_order = 2 
    hp_cutoff_Hz = 1.0 
    b, a = signal.butter(butter_order, hp_cutoff_Hz/(fs_Hz/2.0), 'highpass') 

    for i in range(1,9): 
     data[:,i] = signal.lfilter(b, a, data[:,i], 0) 

    return (data) 

def get_epoch1(data, t_sec, epoch, f_tup, col): 
#f_tup = (f_wdir, f_name, f_columns, out_save, out_dir, out_number, fig_width) 
    f_name = f_tup[1] 
    fig_width = f_tup[6] 

    epoch_boolvector = (t_sec >= epoch[0][0]) & (t_sec <= epoch[0][1]) 
    epoch_timescale = t_sec[epoch_boolvector] 
    epoch_data = data[epoch_boolvector] 

    plt.figure(figsize=(fig_width,8), dpi=96) 
    plt.plot(epoch_timescale, epoch_data[:,col]); 
    plt.xlim(epoch_timescale[0], epoch_timescale[-1]) 
    plt.show() 
    return (epoch_boolvector, epoch_timescale, epoch_data) 

内部主文件

#load the whole data 
(f1_data, f1_data_indices, f1_timescale) = pm.load_data(f1_wdir, f1_name) 

raw_data = f1_data[:] #create copy of f1_data 

(f1ep1_boolvector, f1ep1_timescale, f1ep1_data) = pm.get_epoch1(f1_data, f1_timescale, f1_epochs[1], f1_tup, 8) 

#--- filter data to remove DC (1Hz) 
f1_data = pm.removeDC(f1_data) 


# replace only channel 8 with original data 
f1_data[:,8] = raw_data[:,8] 
(f1ep2_boolvector, f1ep2_timescale, f1ep2_data) = pm.get_epoch1(f1_data, f1_timescale, f1_epochs[1], f1_tup, 8) 
+0

什么没有按不工作? – C8H10N4O2

+1

一个简单的例子(准系统代码,以打印语句作为输出)对于您的理解和我们的故障排除会更有用。 –

+0

疯狂猜测:如果您使用'copy.deepcopy'创建'raw_data'而不是'raw_data = f1_data [:]''会发生什么? – Kevin

回答

1

内的溶液是import copy并使用copy.deepcopy功能。 如需进一步信息检查此链接: docs.python.org/2/library/copy.html

当我有raw_data = f1_data[:]我得到的,pm.removeDC()后:

raw_data is f1_data: False 
(raw_data == f1_data).all(): True 

但是,当我有raw_data = copy.deepcopy(f1_data)我得到的,pm.removeDC()后:

raw_data is f1_data: False 
(raw_data == f1_data).all(): False