[英]How to find all occurences of a substring in a numpy string array
[英]Find all occurences of a specified match of two numbers in numpy array
我需要實現的是獲取所有索引的數組,在我的數據數組中填充零和一的是從零步進到一。 我需要一個非常快速的解決方案,因為我必須處理數百萬個以百分數表示的長方體。 它將在計算中心中運行。 例如..
data_array = np.array([1,1,0,1,1,1,0,0,0,1,1,1,0,1,1,0])
result = [3,9,13]
嘗試這個:
In [23]: np.where(np.diff(a)==1)[0] + 1
Out[23]: array([ 3, 9, 13], dtype=int64)
100M元素數組的時間:
In [46]: a = np.random.choice([0,1], 10**8)
In [47]: %timeit np.nonzero((a[1:] - a[:-1]) == 1)[0] + 1
1 loop, best of 3: 1.46 s per loop
In [48]: %timeit np.where(np.diff(a)==1)[0] + 1
1 loop, best of 3: 1.64 s per loop
步驟如下:
len(diff) = len(orig) - 1
) 所以試試這個:
index = numpy.nonzero((data_array[1:] - data_array[:-1]) == 1)[0] + 1
index
# [3, 9, 13]
好,非常感謝大家。 非零的解決方案對我來說可能更好,因為我需要知道從0-> 1到1-> 0的步長,並最終計算出差值。 這就是我的解決方案。 任何其他建議表示贊賞。)
i_in = np.nonzero( (data_array[1:] - data_array[:-1]) == 1 )[0] +1
i_out = np.nonzero( (data_array[1:] - data_array[:-1]) == -1 )[0] +1
i_return_in_time = (i_in - i_out[:i_in.size] )
由於它是一個充滿0s
和1s
的數組,您可以受益於僅比較而不是在單移位版本之間執行算術運算,即可直接為我們提供布爾數組,該布爾數組可以饋入np.flatnonzero
以獲取索引和最終輸出。
因此,我們將有一個這樣的實現-
np.flatnonzero(data_array[1:] > data_array[:-1])+1
運行時測試-
In [26]: a = np.random.choice([0,1], 10**8)
In [27]: %timeit np.nonzero((a[1:] - a[:-1]) == 1)[0] + 1
1 loop, best of 3: 1.91 s per loop
In [28]: %timeit np.where(np.diff(a)==1)[0] + 1
1 loop, best of 3: 1.91 s per loop
In [29]: %timeit np.flatnonzero(a[1:] > a[:-1])+1
1 loop, best of 3: 954 ms per loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.