第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在numpy數(shù)組中找到相同值的序列的長度(游程長度編碼)

在numpy數(shù)組中找到相同值的序列的長度(游程長度編碼)

慕勒3428872 2019-12-02 09:55:54
在pylab程序中(也可能是matlab程序),我有一個代表距離的數(shù)字的numpy數(shù)組:d[t]是時間上的距離t(我的數(shù)據(jù)的時間跨度是len(d)時間單位)。我感興趣的事件是距離小于某個閾值時,并且我想計算這些事件的持續(xù)時間。使用輕松獲得布爾數(shù)組很容易b = d<threshold,問題歸結(jié)為計算中的True-only單詞的長度順序b。但是我不知道如何有效地做到這一點(即使用numpy原語),我求助于遍歷數(shù)組并進(jìn)行手動更改檢測(即,當(dāng)值從False變?yōu)門rue時初始化計數(shù)器,只要value為True便增加計數(shù)器,并在值返回False時將計數(shù)器輸出到序列。但這非常慢。如何有效地檢測numpy數(shù)組中的那種序列?以下是一些說明我的問題的python代碼:第四個點需要很長時間才能顯示(如果沒有,請增加數(shù)組的大?。ゝrom pylab import *threshold = 7print '.'d = 10*rand(10000000)print '.'b = d<thresholdprint '.'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 '.'
查看完整描述

3 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗 獲得超2個贊

盡管不是numpy原始itertools函數(shù),但函數(shù)通常非??欤虼苏垏L試一下(當(dāng)然,還要測量包括該函數(shù)在內(nèi)的各種解決方案的時間):


def runs_of_ones(bits):

  for bit, group in itertools.groupby(bits):

    if bit: yield sum(group)

如果確實需要列表中的值,那么當(dāng)然可以使用list(runs_of_ones(bits));但也許列表理解仍然會稍微快一些:


def runs_of_ones_list(bits):

  return [sum(g) for b, g in itertools.groupby(bits) if b]

轉(zhuǎn)向“ 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

再說一遍:請確保在為您量身定制的示例中相互比較基準(zhǔn)解決方案!


查看完整回答
反對 回復(fù) 2019-12-02
  • 3 回答
  • 0 關(guān)注
  • 773 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號