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)
这项工作如下:
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
是您的数组。我只保留符号变化处的值,并检查符号是否确实为正负。