numpy
是否有一种简单的方法来确定数组是否具有如下模式:(正数后负数后正数(?
示例:
myArray = np.array([5, 5, 3, 6, -2, -5, 4, 9])
myArray2 = np.array([5, 5, 3, 6, 8, 4, -5, -8])
if foundPatern(myArray): # True
if foundPatern(myArray2): # False
内置了一个numpy
,用于根据符号将数组的每个元素转换为1,0,-1。转换符号后,您可以很容易地使用itertools.groupby
执行此任务:
from itertools import groupby
import numpy as np
def foundPattern(lst):
g = list(groupby(np.sign(lst)))
return (len(g)==3 and g[0][0]==1.0)
其工作原理如下:
- 数组中的项根据其符号(+或-(进行分组
- 如果正好存在3个组,并且第一个组是一组阳性,则返回
True
;在所有其他情况下,返回False
请注意,您没有指定如何处理边缘情况(例如,数组中的0(,因此我不会尝试以任何方式处理它们。但是要注意它们确实存在。边缘情况的另一个例子可以是NaN
。