我有一個 numpy 陣列,其中包含大約 40,000 個值。我需要搜索它以查看該陣列中是否有任何相同的相鄰值組。
例如,假設我有這個陣列:
array_1 = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,1,1,1,5,6,7,3,2,5,1,1]
我希望我的代碼能夠識別陣列開頭的塊并回傳一個索引陣列,告訴我這些塊的位置。所以,像這樣:
index_array_1 = [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
即使 array_1 中還有其他組,我只希望索引陣列在組中的數量高于某個數字(在本例中為 14 或更多)時回傳為真。因為array_1中的其他相鄰組只有3個或更少,所以不需要回傳。
uj5u.com熱心網友回復:
我們可以使用diff flatnonzero來獲取連續數字的起點和終點。然后使用它使用 numpy 廣播創建一個布爾掩碼:
num = 14
len_arr = len(array_1)
cutoffs = np.flatnonzero(np.diff(array_1)!=0) 1
start = np.r_[0, cutoffs]
end = np.r_[cutoffs, len_arr]
s, e = np.c_[start, end][end-start >= num].T.reshape(2,-1,1)
out = ((np.arange(len_arr) >= s) & (np.arange(len_arr) < e)).sum(axis=0)
輸出:
array([0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0])
uj5u.com熱心網友回復:
# x is your input array
n = x.shape[0]
loc_run_start = np.empty(n, dtype=bool)
loc_run_start[0] = True
np.not_equal(x[:-1], x[1:], out=loc_run_start[1:])
run_starts = np.nonzero(loc_run_start)[0]
# find run values
run_values = x[loc_run_start]
# find run lengths
run_lengths = np.diff(np.append(run_starts, n))
print(run_values) # All the values in the array that will be evaluated
# [0, 1, 2, 3, 4, 1, 5, 6, 7, 3, 2, 5, 1]
print(run_starts) # Start of every run of equal item
# [0, 1, 15, 16, 17, 18, 21, 22, 23, 24, 25, 26, 27]
print(run_lengths) # Lenght of every run
# [1, 14, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 2]
從那里您可以檢查是否有任何運行長度符合您的標準并獲得您需要的內容。
感謝作者的整潔代碼。
uj5u.com熱心網友回復:
另一個解決方案itertools.groupby:
from itertools import groupby
out = []
for _, g in groupby(array_1):
tmp = sum(1 for _ in g)
out.extend([tmp >= 14] * tmp)
print(out)
印刷:
[False, 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]
如果你想0/1只是投到int():
out = []
for _, g in groupby(array_1):
tmp = sum(1 for _ in g)
out.extend([int(tmp >= 14)] * tmp)
印刷:
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/462198.html
下一篇:生成二維NumPy陣列的索引
