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

python-在numpy数组中查找正/负/正模式,python,numpy,Python,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。转换符号

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

    这太完美了!直到现在才知道itertools。谢谢你的详细解释!:)@FarhanAhmad那么您最好看一看,因为
    itertools
    是一个非常有用的库。干杯。有一个numpy内置于此:
    np.sign
    。您可以将函数的第一行修改为:
    g=list(groupby(np.sign(lst))
    @SNygard更好!请随意编辑,我远离pc atmA纯numpy解决方案:
    check=np.all((x[np.hstack((True,np.diff(x>=0)))]>=0)==[True,False,True])
    其中
    x
    是您的数组。我只保留符号变化处的值,并检查符号是否确实为正负。