受启发
thissolution,这是一种矢量化的解决方法-
# Get start, stop index pairs for islands/seq. of 1sidx_pairs = np.where(np.diff(np.hstack(([False],a1==1,[False]))))[0].reshape(-1,2)# Get the island lengths, whose argmax would give us the ID of longest island.# Start index of that island would be the desired outputstart_longest_seq = idx_pairs[np.diff(idx_pairs,axis=1).argmax(),0]
样品运行-
In [89]: a1 # Input arrayOut[89]: array([0, 0, 1, 1, 1, 1, 0, 0, 1, 1])In [90]: idx_pairs # Start, stop+1 index pairsOut[90]: array([[ 2, 6], [ 8, 10]])In [91]: np.diff(idx_pairs,axis=1) # Island lengthsOut[91]: array([[4], [2]])In [92]: np.diff(idx_pairs,axis=1).argmax() # Longest island IDOut[92]: 0In [93]: idx_pairs[np.diff(idx_pairs,axis=1).argmax(),0] # Longest island startOut[93]: 2



