Я пытаюсь найти и отобразить точное число и расположение пиков в массиве numpy.
Я пытался использовать функцию argrelextrema, но она не находит правильные точки.
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import argrelextrema
%matplotlib inline
ID = 64008
array = frame[frame["IdVeiculo"] == ID]["Laco_1_Amplitude"].to_numpy()
plt.plot(array)
maxima = argrelextrema(array, np.greater, mode="wrap")
peak_indexes = maxima[0]
peak_x = peak_indexes
peak_y = array[peak_indexes]
plt.plot(peak_x, peak_y, marker='o', linestyle='dashed', color='red', label="Peaks")
В этом случае это должны быть 7 пиков: Неправильные пики
И это только 1 пик Неправильный пик
Мой массивдля первого примера:
array([ 50, 55, 59, 66, 71, 78, 87, 94, 103, 115, 126, 138, 152,
165, 177, 191, 202, 216, 228, 239, 246, 255, 262, 269, 274, 276,
278, 283, 281, 283, 281, 278, 276, 274, 274, 269, 267, 262, 258,
258, 253, 253, 248, 246, 246, 244, 241, 241, 239, 239, 237, 234,
234, 234, 232, 232, 232, 230, 228, 228, 225, 225, 223, 223, 223,
223, 218, 225, 225, 228, 230, 232, 232, 237, 239, 244, 246, 248,
251, 253, 255, 258, 260, 260, 264, 269, 274, 278, 287, 297, 306,
320, 331, 345, 359, 370, 387, 403, 426, 437, 446, 449, 446, 469,
465, 469, 474, 469, 458, 442, 426, 410, 393, 377, 361, 343, 331,
317, 304, 292, 285, 276, 274, 264, 262, 258, 253, 248, 246, 244,
241, 239, 239, 237, 237, 234, 234, 232, 234, 234, 234, 234, 237,
237, 239, 241, 244, 248, 251, 253, 255, 260, 264, 267, 271, 274,
278, 285, 287, 290, 292, 294, 297, 297, 297, 292, 292, 287, 283,
278, 274, 264, 258, 251, 246, 244, 241, 239, 237, 239, 244, 248,
255, 262, 271, 283, 292, 306, 317, 329, 340, 352, 364, 373, 380,
389, 393, 396, 403, 405, 407, 410, 410, 412, 412, 412, 414, 412,
412, 412, 405, 400, 396, 389, 380, 370, 361, 350, 336, 324, 313,
304, 294, 287, 281, 274, 271, 271, 271, 274, 276, 281, 287, 297,
306, 315, 322, 331, 343, 347, 357, 361, 366, 368, 373, 373, 375,
375, 375, 375, 375, 373, 373, 373, 368, 370, 368, 366, 366, 361,
359, 359, 354, 352, 350, 345, 343, 340, 336, 336, 331, 327, 322,
322, 322, 317, 311, 308, 308, 306, 306, 306, 306, 304, 304, 313,
306, 306, 306, 329, 320, 315, 361, 419, 453, 343, 345, 357, 368,
380, 393, 405, 419, 423, 428, 444, 463, 467, 474, 472, 481, 488,
490, 495, 497, 499, 499, 499, 499, 497, 495, 493, 488, 481, 472,
463, 453, 442, 430, 419, 405, 393, 384, 373, 361, 357, 350, 345,
340, 338, 338, 340, 343, 350, 359, 366, 375, 387, 396, 410, 421,
433, 446, 456, 467, 479, 488, 499, 506, 513, 518, 525, 525, 527,
529, 527, 525, 522, 520, 516, 511, 506, 504, 497, 493, 486, 481,
474, 469, 467, 463, 458, 456, 453, 453, 449, 446, 446, 444, 444,
440, 440, 437, 430, 430, 423, 416, 410, 403, 391, 380, 366, 352,
338, 320, 304, 287, 269, 253, 234, 214, 198, 182, 168, 156, 140,
129, 117, 105, 96, 87, 78, 71, 69, 62, 57, 52, 50, 43,
43, 36, 36, 34, 29, 27, 23, 20, 18, 18, 13, 13, 13,
11, 11, 6, 6, 6, 4, 4, 6, 4, 0, 0, 0, 0,
2, 0, 0, 2, -2, -2, 0, -2, -2, -2, -4, -4, -4,
-2, -2, -2, -6, -6, -4, -6, -4, -4, -6, -6, -4, -6,
-6, -6, -6, -4, -6, -4, -4, -6, -4, -6, -6, -6, -9,
-6, -6, -4, -6, -4, -4, -4, -4, -6, -4, -4, -4, -4,
-4, -4, -2, -2, 0, -2, -2, -2, 0, -2, 0, -4, 0,
-2, -2, -4, -2, -2, -4, -4, -2, -2, -2, -2, 0, -2,
-2, 0, -2, 0, 0, -2, -4, -4, -2, -2, -2, -2, -2,
-2, 0, -2, -2, 0, -4, -2, 0, -4, -2, 0, -2])