日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...

發布時間:2024/1/1 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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数组中查找相同值的序列长度(运行长度编码)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。