【发布时间】:2013-02-22 02:28:08
【问题描述】:
我有一个大约 1.5 亿点的时间序列。我需要放大 300 万个点。也就是说,我需要在这 1.5 亿点时间序列中提取围绕这 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 的数组,它就会爆炸。是否有更高效的内存或(希望)更优雅的方法来提取基于另一个数组的一部分?
相关 This 答案是相关的。但是,我不确定如何应用它并避免循环。我是否会有效地使用布尔矩阵的列反复索引时间序列向量?
【问题讨论】:
-
您需要一次获得所有这些吗?之后你对每个波形做了什么?
-
我要在波形矩阵上做 PCA(好吧,SVD)。在获取波形和执行此操作之间,我可以将波形零碎地保存到文件中(如果我知道如何做到这一点)。但是,我需要在某个时候访问所有波形。