python做数字分析,如何找到波峰波谷?
伊谢尔伦
伊谢尔伦 2017-04-17 17:54:21
0
1
1431

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(1)
左手右手慢动作

Anda boleh cuba menggunakan modul 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)]

Apabila bilangan elemen yang ditemui agak kecil, fungsi nlargest() dan nsmallest() adalah sangat sesuai. Jika anda hanya ingin mencari elemen minimum atau maksimum unik (N=1), lebih pantas menggunakan fungsi min() dan max(). Begitu juga, jika saiz N hampir dengan saiz koleksi, biasanya lebih cepat untuk mengisih koleksi dahulu dan kemudian menggunakan operasi menghiris (sorted(items)[:N] atau sorted(items)[-N:] ). Fungsi nlargest() dan nsmallest() perlu digunakan dalam situasi yang betul untuk memanfaatkannya (jika N hampir dengan saiz set, lebih baik menggunakan operasi pengisihan).


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)]

Gelung pertama untuk mencari semua puncak dan palung, kemudian cari lima teratas

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan