我有一個陣列A的條件陳述句(假設它是A>10),我得到這個布爾結果。
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, False, False, False, False,
False, False, False, False, False, False, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False])
現在我正在尋找值為True的索引。所以我得到這個陣列。
array([20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90] )
我需要做的是找到連續索引的起始索引和結束索引。例如,在上面的陣列中,第一個連續指數的起始指數是20,結束指數是49。同樣地,第二組連續索引的起始索引是60,結束索引是90。
因此,總結起來,我的輸出應該是:
start_indices = array([20,60] )
end_indices = array([49,90] )
如何做到這一點?
uj5u.com熱心網友回復:
import numpy as np
changes = np.where(np.diff(A))[0] # 從一個元組中獲取實際的陣列。
start = changes[::2] 1.
end = changes[1::2]
uj5u.com熱心網友回復:
下面是一個使用groupby和accumulate的解決方案,來自itertools:
from itertools import groupby, accumulate
indices = list(accumulate(len(list(g)) for i,g in groupby(a))
starts = indices[:len(indices)//2*2:2]
停止 = [i-1 for i in indices[1::2] ]
NB.它適用于任何迭代器,不僅僅是numpy陣列。
輸出:
>>> starts
[20, 60]
>>> 停止
[49, 90]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309441.html
標籤:
上一篇:用GetX通過引數發送資料
