我有NumPy數組表示一個序列的分段。 B
是感興趣片段的開始,I
其延續,O
在任何片段之外。例如,下面的陣列中,有感興趣的三個部分:數組的最長前綴等於一個值
>>> y
array(['B', 'I', 'I', 'O', 'B', 'I', 'O', 'O', 'B', 'O'],
dtype='|S1')
我能找到段與np.where(y == "B")[0]
容易啓動。但是現在我試圖找出段的長度,即最長前綴的長度等於I
。我可以這樣做使用itertools.takewhile
:
>>> from itertools import takewhile
>>> lengths = [1 + sum(1 for _ in takewhile(lambda x: x == "I", y[start + 1:]))
... for start in np.where(y == "B")[0]]
>>> lengths
[3, 2, 1]
其中,要誠實,工作正常,但有一個量化的方式來實現這一目標?
出於好奇,是否有所有numpy方法在某處擴展的列表? – Daniel
@Ophion:不是我所知道的。大多數只是線性時間,但搜索和排序顯然不可能。 –