約1億5000万ポイントの時系列があります。300万ポイントにズームインする必要があります。つまり、この1億5000万ポイントの時系列で、これらの300万の関心領域のそれぞれを取り巻く100の時点を抽出する必要があります。
試み:
def get_waveforms(data,spiketimes,lookback=100,lookahead=100):
answer = zeros((len(spiketimes),(lookback+lookahead)))
duration = len(data)
for i in xrange(len(spiketimes)):
if(spiketimes[i] - lookback) > 0 and spiketimes[i] + lookahead) < duration:
answer[i,:] = data[(spiketimes[i]-lookback):(spiketimes[i]+lookahead)]
return answer
これは私のMacで利用可能なすべてのメモリを使い果たします。渡そうとすると爆発しlen(array) > 100000
ます。あるアレイの一部を別のアレイに基づいて引き出すための、よりメモリ効率の高い、または(うまくいけば)よりエレガントなアプローチはありますか?
関連 この回答は関連しています。ただし、それを適用してループを回避する方法が正確にはわかりません。事実上、ブール行列の列を使用して時系列ベクトルに何度もインデックスを付けますか?