1 回答

TA貢獻1911條經驗 獲得超7個贊
對于少量連續搜索模式,我們可以簡單地切片并查找所有匹配項,最后使用our-favourite argmax。
因此,對于2連續搜索模式,它將是 -
In [6]: ((a[:-1]==1) & (a[1:]==1)).argmax()
Out[6]: 6
一些解釋
這都是關于切片的,因為我們得到了兩個單偏移的數組切片。一個偏移量是因為連續搜索的窗口長度為2。因此,對于 的搜索窗口長度3,我們需要考慮兩個偏移的數組切片等。現在,回到我們簡單的兩個連續窗口案例,我們有一個偏移的切片。我們將這些與 進行比較1,這為我們提供了匹配的布爾數組。然后來AND-ing了,這樣就覆蓋了整個窗口。最后跳進我們的島嶼argmax,開始第一個島嶼!
步驟的分解應該有助于進一步澄清給定的樣本 -
In [24]: a
Out[24]: array([0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1])
In [25]: a[:-1]
Out[25]: array([0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1])
In [26]: a[:-1]==1
Out[26]:
array([False, False, False, True, False, False, True, True, False,
True, True])
In [27]: a[1:]==1
Out[27]:
array([False, False, True, False, False, True, True, False, True,
True, True])
In [28]: (a[:-1]==1) & (a[1:]==1)
Out[28]:
array([False, False, False, False, False, False, True, False, False,
True, True])
In [29]: ((a[:-1]==1) & (a[1:]==1)).argmax()
Out[29]: 6
更多的連續出現
對于更多的缺點。出現,我們可以求助于更內置和使用的東西np.convolve,就像這樣 -
In [20]: W = 2 # window-length
In [21]: np.convolve(a,[1]*W,'same').argmax()-W//2
Out[21]: 6
In [22]: W = 3
In [23]: np.convolve(a,[1]*W,'same').argmax()-W//2
Out[23]: 9
添加回答
舉報