Нахождение и построение точек максимума и минимума массива NumPy - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь найти и отобразить точное число и расположение пиков в массиве 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])
...