在numpy数组中查找正/负/正模式



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)

其工作原理如下:

  1. 数组中的项根据其符号(+或-(进行分组
  2. 如果正好存在3个组,并且第一个组是一组阳性,则返回True;在所有其他情况下,返回False

请注意,您没有指定如何处理边缘情况(例如,数组中的0(,因此我不会尝试以任何方式处理它们。但是要注意它们确实存在。边缘情况的另一个例子可以是NaN