在pylab程序中(也可能是matlab程序),我有一个代表距离的数字的numpy数组:d[t]是时间上的距离t(我的数据的时间跨度是len(d)时间单位)。
我感兴趣的事件是距离小于某个阈值时,并且我想计算这些事件的持续时间。使用轻松获得布尔数组很容易b = d<threshold,问题归结为计算中的True-only单词的长度顺序b。但是我不知道如何有效地做到这一点(即使用numpy原语),我求助于遍历数组并进行手动更改检测(即,当值从False变为True时初始化计数器,只要value为True便增加计数器,并在值返回False时将计数器输出到序列。但这非常慢。
如何有效地检测numpy数组中的那种序列?
以下是一些说明我的问题的python代码:第四个点需要很长时间才能显示(如果没有,请增加数组的大小)
from pylab import *
threshold = 7
print '.'
d = 10*rand(10000000)
print '.'
b = d<threshold
print '.'
durations=[]
for i in xrange(len(b)):
if b[i] and (i==0 or not b[i-1]):
counter=1
if i>0 and b[i-1] and b[i]:
counter+=1
if (b[i-1] and not b[i]) or i==len(b)-1:
durations.append(counter)
print '.'
临摹微笑
相关分类