1e8の長さ(1億要素)の1-D時系列があります。Dropboxで使用しているデータへのリンクは次のとおりです。(ファイルは382 MBです。)
アップデート
memory_profilingに基づいて、エラーは行で発生します
data[absolute(data-dc)< m*std(data)]=dc.
具体的には、操作によってabsolute(data-dc)
すべてのメモリが消費されます。Data
上記のとおりでdc
あり、定数です。おそらくこれは微妙な構文エラーですか?
外れ値とアーティファクトを削除し、それらの値を中央値に置き換えたいと思います。私は次の関数でそれをやろうとしています。
from numpy import *
from sys import argv
from scipy.io import savemat
from scipy.stats import scoreatpercentile
def reject_outliers(data,dc,m=3):
data[data==0] = dc
data[bp.absolute(data-dc) < m*np.std(data)] = dc
return data
def butter_bandpass(lowcut,highcut,fs,order=8):
nyq = 0.5*fs
low = lowcut/nyq
high = highcut/nyq
b,a= butter(order, [low, high], btype='band')
return b,a
def butter_bandpass_filter(data,lowcut,highcut,fs,order=8):
b,a = butter_bandpass(lowcut,highcut,fs,order=order)
return lfilter(b,a,data)
OFFSET = 432
filename = argv[1]
outname = argv[2]
print 'Opening '+ filename
with open(filename,'rb') as stream:
stream.seek(OFFSET)
data=fromfile(stream,dtype='int16')
print 'Removing Artifacts, accounting for zero-filling'
dc = median(data)
data = reject_outliers(data,dc)
threshold = scoreatpercentile(absolute(data),85)
print 'Filtering and Detrending'
data = butter_bandpass_filter(data,300,7000,20000)
savemat(outname+'.mat',mdict={'data':data})
1つのファイルでこれを呼び出すと、4GBのRAMと3GBの仮想メモリが消費されます。作成したスクリプトをステップ実行したので、この関数の2行目であると確信しています。このスクリプトは、常にこの部分でハングします。(OS XのFinderで)利用可能なハードドライブのスペースが秒単位で急減しているのを見ることができます。
時系列はそれを説明するのに十分な長さではありません。の2行目の何が問題になっていreject-outliers
ますか?