1 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
對(duì)于少量連續(xù)搜索模式,我們可以簡(jiǎn)單地切片并查找所有匹配項(xiàng),最后使用our-favourite argmax。
因此,對(duì)于2連續(xù)搜索模式,它將是 -
In [6]: ((a[:-1]==1) & (a[1:]==1)).argmax()
Out[6]: 6
一些解釋
這都是關(guān)于切片的,因?yàn)槲覀兊玫搅藘蓚€(gè)單偏移的數(shù)組切片。一個(gè)偏移量是因?yàn)檫B續(xù)搜索的窗口長(zhǎng)度為2。因此,對(duì)于 的搜索窗口長(zhǎng)度3,我們需要考慮兩個(gè)偏移的數(shù)組切片等。現(xiàn)在,回到我們簡(jiǎn)單的兩個(gè)連續(xù)窗口案例,我們有一個(gè)偏移的切片。我們將這些與 進(jìn)行比較1,這為我們提供了匹配的布爾數(shù)組。然后來(lái)AND-ing了,這樣就覆蓋了整個(gè)窗口。最后跳進(jìn)我們的島嶼argmax,開(kāi)始第一個(gè)島嶼!
步驟的分解應(yīng)該有助于進(jìn)一步澄清給定的樣本 -
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
更多的連續(xù)出現(xiàn)
對(duì)于更多的缺點(diǎn)。出現(xiàn),我們可以求助于更內(nèi)置和使用的東西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
添加回答
舉報(bào)