假設我有一組數(shù)字:arr=[1, 2, 3, 4, 5, 4, 3, 2, 1]。常規(guī)正則表達式將其基本單位/文字作為字符。我想知道是否有一種方法可以將“對象”作為基本單位,用于 object [a,b]。現(xiàn)在我想回答這個問題,“是否arr包含至少 2 個長度為 3 且具有正梯度的區(qū)間?” . 我在想我可以通過用[a,b]對象替換字符來模仿正則表達式,其中a是間隔的大小,是在該間隔 ( )b上運行的函數(shù)。gradient_pos該函數(shù)將返回True或False取決于是否滿足條件。例如,要回答上述問題,您會查詢:[3,gradient_pos]{2,}您將看到語法遵循所有正則表達式規(guī)則,除了我們不是查看字符,而是查看[a,b]有效評估為Trueor的對象False。這個想法是,正則表達式會嘗試匹配滿足gradient_pos. 那有意義嗎?我知道這很抽象,但如果有人能幫助我實現(xiàn)這樣的目標,我將不勝感激!謝謝!
1 回答

動漫人物
TA貢獻1815條經(jīng)驗 獲得超10個贊
您可以將其視為正則表達式問題。所以你的數(shù)組會變成:
import numpy as np
arr=[1, 2, 3, 4, 5, 4, 3, 2, 1]
arr = np.array(arr)
arr_as_str=''.join(map(str,np.sign(arr[1:]-arr[:-1])+1))
我得到了不包括最后一個元素的梯度,并將sign
函數(shù)從 (-1,+1) 轉(zhuǎn)移到 (0,2)。這樣做的原因是為了避免字符串表示中的減號。
所以現(xiàn)在你可以像往常一樣應用正則表達式匹配:
負梯度:0
零梯度:1
正梯度:2
您的“3 個連續(xù)正梯度”查詢將如下所示:
matches=list(re.finditer('(?=(2{3}))',arr_as_str))
由于存在重疊的正則表達式匹配項,因此您必須像以下那樣使用先行查找: Python regex find all overlapping matches?
您可以使用起始索引引用原始數(shù)組,而且您知道序列有多長:
matches[1].start()
我建議使用這種方法是因為您似乎對正則表達式很滿意。但是,如果您有興趣探索其他方法,我建議您查看形態(tài)過濾,這將是我的第一選擇
添加回答
舉報
0/150
提交
取消