python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...
在pylab程序中(也可能是一個matlab程序)我有一個代表距離的numpy數組:d [t]是時間t的距離(我的數據的時間跨度是len(d)時間單位) .
我感興趣的事件是當距離低于某個閾值時,我想計算這些事件的持續時間.很容易得到一個b = d
如何在numpy數組中有效地檢測那種序列?
下面是一些python代碼,說明我的問題:第四個點需要很長時間才能出現(如果沒有,增加數組的大小)
from pylab import *
threshold = 7
print '.'
d = 10*rand(10000000)
print '.'
b = d
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 '.'
解決方法:
雖然不是numpy原語,但itertools函數通常非???所以請嘗試這個(并且測量包括這個在內的各種解決方案的時間):
def runs_of_ones(bits):
for bit, group in itertools.groupby(bits):
if bit: yield sum(group)
如果確實需要列表中的值,那么當然可以使用list(runs_of_ones(bits));但也許列表理解可能會略微加快:
def runs_of_ones_list(bits):
return [sum(g) for b, g in itertools.groupby(bits) if b]
轉向“numpy-native”的可能性,那么:
def runs_of_ones_array(bits):
# make sure all runs of ones are well-bounded
bounded = numpy.hstack(([0], bits, [0]))
# get 1 at run starts and -1 at run ends
difs = numpy.diff(bounded)
run_starts, = numpy.where(difs > 0)
run_ends, = numpy.where(difs < 0)
return run_ends - run_starts
再次:確保在實際的示例中針對彼此對比解決方案!
標簽:python,numpy,matlab,matplotlib
總結
以上是生活随笔為你收集整理的python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是STC89C52单片机
- 下一篇: websocket python爬虫_p