我有一個一維陣列:
arr = np.array([0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 2, 3, 0, 0, 1, ...], dtype='uint16')
我想創建一個mask陣列,它是True任何N大于 2 的值的 /- 索引,產生以下(對于N=3)
mask = [F, T, T, T, T, T, T, T, F, F, T, T, T, T, T, T, T, F, F, F, T, T, T, T, T, T, T, ...]
(注意,為了便于閱讀,我使用了T/ )F
我需要這個速度相當快,因為??我的實際陣列有數百萬個點長,N可能會是 500 左右。
編輯:類似的問題
uj5u.com熱心網友回復:
找到大于2然后將它們周圍的元素設定為的元素True:
a = np.array([0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0])
N = 3
mask = a > 2
center = np.where(mask)[0]
mask[np.maximum(np.ravel(center - np.arange(1, 1 N).reshape(-1, 1)), 0)] = True
mask[np.minimum(np.ravel(center np.arange(1, 1 N).reshape(-1, 1)), len(a)-1)] = True
感謝@Michael Szczesny 指出邊緣情況。和確保索引不會(無意)超出范圍maximum。minimum
uj5u.com熱心網友回復:
您可以使用一個卷積numpy.convolve和一個長度為 2*N 1(每側 N 加上自身)的陣列作為掩碼:
np.convolve(arr>2, np.ones(2*N 1), mode='same').astyoe(bool)
輸出:
array([False, True, True, True, True, True, True, True, False,
False, True, True, True, True, True, True, True, False,
False, False, True, True, True, True, True, True, True])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478398.html
下一篇:梯形上的雙線性插值
