假設我有一些像
a = np.random.random(100) > 0.5
array([ True, True, False, False, True, False, False, True, True,
True, False, False, True, False, True, False, True, True,
False, False, False, False, False, True,...
我想找到True最小的相鄰s 的所有部分的起始索引X。所以X=3在上面的隨機片段中,我想要7. 因為X=2我應該得到0,7,16.
我可以用回圈來做到這一點,但想知道是否有人可以告訴我一個更聰明的方法?
uj5u.com熱心網友回復:
嘗試 scipy.signal.find_peaks
import numpy as np
from scipy.signal import find_peaks
a = np.array([True, True, False, False, True, False, False, True, True,
True, False, False, True, False, True, False, True, True,
False, False, False, False, False, True])
_, peaks = find_peaks(np.r_[0, a, 0], width=3)
result = peaks["left_bases"]
print(result)
輸出
[7]
對于width=2,你有:
_, peaks = find_peaks(np.r_[0, a, 0], width=2)
result = peaks["left_bases"]
print(result)
輸出
[ 0 7 16]
uj5u.com熱心網友回復:
你可以使用卷積:
convolution = np.convolve(a, np.array([1, 1, 1]))
np.where(convolution == 3)[0] - 2
這里的卷積 [1, 1, 1] 會將數字與其前后的數字相加。然后你可以找到所有達到 3 的索引并減去 2
這是任意數量連續的概括
def find_consecutive_sequences(number_of_consecutive, a)
convolution = np.convolve(a, np.ones(shape=(number_of_consecutive)))
return np.where(convolution == number_of_consecutive)[0] - (number_of_consecutive - 1 )
print(find_consecutive_sequences(3, a))
print(find_consecutive_sequences(4, a))
print(find_consecutive_sequences(5, a))
這使
[ 7 16 17 18]
[16 17]
[16]
對于(稍微修改以測驗4和5案例)是
a = np.array([ True, True, False, False, True, False, False, True, True,
True, False, False, True, False, True, False, True, True,
True, True, False, False])
uj5u.com熱心網友回復:
您可以True通過查找布爾陣列的累積和,然后將該 cumsum 陣列拆分為連續數字的子陣列并提取長度為 length 的子陣列的起點來找到連續的s X。
def starting_point_of_X_consecutive_Trues(arr, X):
arr_cumsum = arr.cumsum()
splits = np.split(arr_cumsum, np.where(np.diff(arr_cumsum) != 1)[0] 1)
relevant_points = [splits[0][0]] if len(splits[0]) >= X else []
relevant_points = [split[1] for split in splits[1:] if len(split)-1 >= X]
return np.isin(arr_cumsum, relevant_points).nonzero()[0]
輸出:
starting_point_of_X_consecutive_Trues(a, 3) # [7]
starting_point_of_X_consecutive_Trues(a, 2) # [0,7,16]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372133.html
