recherche

Maison  >  Questions et réponses  >  le corps du texte

python做数字分析,如何找到波峰波谷?

数字呈现不规律的波动形状,而且值变化也不一定是只朝一个方向,会有反复。请问如何能找出值排名前5的波峰和波谷的大小和位置。有计算相关的函数吗?

伊谢尔伦伊谢尔伦2803 Il y a quelques jours1434

répondre à tous(1)je répondrai

  • ringa_lee

    ringa_lee2017-04-17 17:56:21

    Vous pouvez essayer d'utiliser le module heapq.

    import heapq
    
    numbers = [1, 3, 5, 2, 4, 1.1, 3.5, 4.8, 0.5, 2.4, -1.5]
    
    # 输出元祖第一个元素是index,第二元素是比较的数值
    print(heapq.nsmallest(5, enumerate(numbers), key=lambda x: x[1]))
    # [(10, -1.5), (8, 0.5), (0, 1), (5, 1.1), (3, 2)]
    
    print(heapq.nlargest(5, enumerate(numbers), key=lambda x: x[1]))
    # [(2, 5), (7, 4.8), (4, 4), (6, 3.5), (1, 3)]
    

    Lorsque le nombre d'éléments à trouver est relativement faible, les fonctions nlargest() et nsmallest() sont très adaptées. Si vous souhaitez simplement trouver l'élément minimum ou maximum (N=1) unique, il est plus rapide d'utiliser les fonctions min() et max(). De même, si la taille de N est proche de la taille de la collection, il est généralement plus rapide de trier d'abord la collection puis d'utiliser l'opération de découpage (sorted(items)[:N] ou sorted(items)[-N:] ). Les fonctions nlargest() et nsmallest() doivent être utilisées dans les bonnes situations pour en profiter (si N est proche de la taille de l'ensemble, il vaut mieux utiliser des opérations de tri).


    nums = [1,2,3,2,4,5,4,3,2,1,8,9,10,11,10,9,8]
    peaks = []
    troughs = []
    for idx in range(1, len(nums)-1):
        if nums[idx-1] < nums[idx] > nums[idx+1]:
            peaks.append((idx, nums[idx]))
        if nums[idx-1] > nums[idx] < nums[idx+1]:
            troughs.append((idx, nums[idx]))
            
    print(peaks) # [(2, 3), (5, 5), (13, 11)]
    print(troughs) # [(3, 2), (9, 1)]

    Faites d'abord une boucle pour trouver tous les pics et tous les creux, puis trouvez les cinq premiers

    répondre
    0
  • Annulerrépondre