python第七章课后习题(11)

完成函数fun11(),从一维数组data中找到所有峰值的索引。说明:峰值点大于左右两侧的数据值,不包含端点。
提示: np.diff,np.sign,np.where(condition)
这题的话
首先获取他们的差值,利用符号函数转换便于计算
样例结果为
[ 2 4 -6 1 4 -6 1]
[ 1 1 -1 1 1 -1 1]
要寻找峰值,即比前面和后面都要大
所以利用diff时,数字是-1就是比后面的大,数字是1就是比后面的小
再进行一次diff,结果为
[ 0 -2 2 0 -2 2]
结果为-2的点一定是-1-1
意思就是我比后面的大,但是上一个索引对应的数据比后面的小,即为峰值
那么为什么不是2呢
如果data=[9, 3, 7, 1,2, 6, 0, 1]
结果就是[0,2,5]
多了一个端点,那么就好非常好理解了
所以找-2的点然后+1就是索引了
+1是因为diff后len会-1,

def fun11(data=[1, 3, 7, 1, 2, 6, 0, 1]):
    """
    Arg:
        data : a list as input; e.g. [1, 3, 7, 1, 2, 6, 0, 1]
    return a numpy ndarray; e.g. [2 5]
    
    """
    nump=np.array(data)
    cha=np.diff(nump)
    sign=np.sign(cha)
    cha1=np.diff(sign)
    res0=np.where(cha1==-2)[0]+1
    return res0

猜你喜欢

转载自blog.csdn.net/qq_53029299/article/details/115121117
今日推荐