2015-10-21 9 views

risposta

3

Un approccio utilizzando np.diff e np.where -

# Append with `-1s` at either ends and get the differentiation 
dfa = np.diff(np.hstack((-1,a,-1))) 

# Get the positions of starts and stops of 1s in `a` 
starts = np.where(dfa==2)[0] 
stops = np.where(dfa==-2)[0] 

# Get valid mask for pairs from starts and stops being of at least 3 in length 
valid_mask = (stops - starts) >= 3 

# Finally collect the valid pairs as the output 
out = np.column_stack((starts,stops))[valid_mask].tolist() 
+0

@corinna Era interessante, quindi nessun problema! – Divakar

0

Non so NumPy molto bene, ma non sarebbe meglio usare la funzione semplice?

def slices(a, t): 
    start = None 
    i = 0 # index into array 
    slices = [] 
    for val in a: 
     if a[i] == 1: # start of sequence 
      if start is None: 
       start = i 
     else: # -1 end of sequence 
      if start is not None: 
       if i - start >= t: # check sequence for minimum size 
        slices.append((start, i)) 
       start = None 
     i += 1 

    # if sequence of 1's doesn't end with -1 within array 
    if start is not None: 
     if i - start >= t: 
      slices.append((start, i)) 

    return slices 
Problemi correlati