#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я просматриваю множество точек данных и могу отобразить их все на графике. это огромный массив значений [x, y], и программное обеспечение для построения графиков, с которым я работаю, в настоящее время имеет либо каждую помеченную точку, либо ни одну из них.
Я хочу ограничить количество меток на графике, чтобы обнаруживались только «пики» данных, что означает определение наибольшего числа в строке, прежде чем числа снова выпадут
пример извлечения из данных:
[[13.003, 1710.0], [13.006, 1234.0], [13.009, 1207.0], [13.013, 1034.0], [13.016, 954.0], [13.019, 826.0], [13.022, 882.0], [13.025, 1239.0], [13.028, 1158.0], [13.032, 1459.0], [13.035, 1695.0], [13.038, 2374.0], [13.041, 2956.0], [13.044, 2945.0], [13.047, 2657.0], [13.051, 2958.0], [13.054, 2912.0], [13.057, 2031.0], [13.06, 1742.0], [13.063, 1459.0], [13.066, 1140.0], [13.07, 993.0], [13.073, 1010.0], [13.076, 1061.0], [13.079, 1021.0], [13.082, 1057.0], [13.085, 1030.0], [13.089, 1059.0], [13.092, 1336.0], [13.095, 1417.0], [13.098, 1270.0], [13.101, 1494.0], [13.104, 1492.0], [13.107, 1863.0], [13.111, 2289.0], [13.114, 2545.0], [13.117, 3372.0], [13.12, 3569.0], [13.123, 4484.0], [13.126, 4802.0], [13.13, 4525.0], [13.133, 4383.0], [13.136, 3686.0], [13.139, 3202.0], [13.142, 2132.0], [13.145, 1562.0], [13.149, 1346.0], [13.152, 1122.0], [13.155, 1117.0], [13.158, 1011.0], [13.161, 799.0], [13.164, 920.0], [13.168, 885.0], [13.171, 1288.0], [13.174, 1199.0], [13.177, 1277.0], [13.18, 1905.0], [13.183, 1853.0], [13.187, 1999.0], [13.19, 2558.0], [13.193, 2411.0], [13.196, 2251.0], [13.199, 2191.0], [13.202, 1883.0], [13.206, 1822.0], [13.209, 2341.0], [13.212, 3156.0], [13.215, 4374.0], [13.218, 7440.0], [13.221, 9609.0], [13.224, 11652.0], [13.228, 14345.0], [13.231, 14961.0], [13.234, 15048.0], [13.237, 15417.0], [13.24, 14061.0], [13.243, 12105.0], [13.247, 10332.0], [13.25, 8405.0], [13.253, 6828.0], [13.256, 5471.0], [13.259, 4222.0], [13.262, 2918.0], [13.266, 3087.0], [13.269, 2358.0], [13.272, 2878.0], [13.275, 3048.0], [13.278, 3473.0], [13.281, 4168.0], [13.285, 5027.0], [13.288, 6051.0], [13.291, 6520.0], [13.294, 7204.0], [13.297, 6583.0], [13.3, 6605.0], [13.304, 4962.0], [13.307, 4755.0], [13.31, 2911.0], [13.313, 2710.0], [13.316, 3076.0], [13.319, 4266.0], [13.323, 5643.0], [13.326, 8138.0], [13.329, 11037.0], [13.332, 13828.0], [13.335, 15239.0], [13.338, 15657.0], [13.341, 14039.0], [13.345, 11400.0], [13.348, 8604.0], [13.351, 6062.0], [13.354, 4338.0], [13.357, 3076.0], [13.36, 2439.0], [13.364, 2046.0], [13.367, 2055.0], [13.37, 1958.0], [13.373, 2365.0], [13.376, 2523.0], [13.379, 2586.0], [13.383, 2880.0], [13.386, 3121.0], [13.389, 2915.0], [13.392, 2480.0], [13.395, 2472.0], [13.398, 3032.0], [13.402, 2722.0], [13.405, 3588.0], [13.408, 4710.0], [13.411, 5875.0], [13.414, 7644.0], [13.417, 10165.0], [13.421, 14273.0], [13.424, 14209.0], [13.427, 14768.0], [13.43, 13449.0], [13.433, 11303.0], [13.436, 8163.0], [13.439, 5785.0], [13.443, 3517.0], [13.446, 2550.0], [13.449, 1953.0], [13.452, 1500.0], [13.455, 1291.0], [13.458, 1357.0], [13.462, 1011.0], [13.465, 1191.0], [13.468, 1320.0], [13.471, 1436.0], [13.474, 1939.0], [13.477, 1897.0], [13.481, 2475.0], [13.484, 3024.0], [13.487, 3522.0], [13.49, 3851.0], [13.493, 4528.0], [13.496, 3935.0], [13.5, 3700.0], [13.503, 3257.0], [13.506, 2895.0], [13.509, 2642.0], [13.512, 2121.0], [13.515, 2049.0], [13.519, 1891.0], [13.522, 2195.0], [13.525, 2137.0], [13.528, 2401.0], [13.531, 2397.0], [13.534, 3020.0], [13.538, 2787.0], [13.541, 3034.0], [13.544, 2737.0], [13.547, 2879.0], [13.55, 2569.0], [13.553, 2359.0], [13.556, 2302.0], [13.56, 1995.0], [13.563, 2280.0], [13.566, 2021.0], [13.569, 1854.0], [13.572, 1757.0], [13.575, 1440.0], [13.579, 1393.0], [13.582, 1903.0], [13.585, 1781.0], [13.588, 1831.0], [13.591, 2148.0], [13.594, 2255.0], [13.598, 2530.0], [13.601, 2560.0], [13.604, 2555.0], [13.607, 2266.0], [13.61, 1964.0], [13.613, 1760.0], [13.617, 2126.0], [13.62, 1956.0], [13.623, 1543.0], [13.626, 2123.0], [13.629, 2016.0], [13.632, 2131.0], [13.636, 2273.0], [13.639, 2280.0], [13.642, 2237.0], [13.645, 2160.0], [13.648, 2165.0], [13.651, 2348.0], [13.655, 2529.0], [13.658, 2448.0], [13.661, 2979.0], [13.664, 3284.0], [13.667, 4061.0], [13.67, 4018.0], [13.673, 4465.0], [13.677, 4945.0], [13.68, 7433.0], [13.683, 12841.0], [13.686, 23128.0], [13.689, 40640.0], [13.692, 63304.0], [13.696, 92560.0], [13.699, 123320.0], [13.702, 137280.0], [13.705, 144256.0], [13.708, 130024.0], [13.711, 104280.0], [13.715, 75816.0], [13.718, 47656.0], [13.721, 29248.0], [13.724, 17368.0], [13.727, 9820.0], [13.73, 6355.0], [13.734, 4448.0], [13.737, 3775.0], [13.74, 3221.0], [13.743, 2855.0], [13.746, 3027.0], [13.749, 2961.0], [13.753, 3366.0], [13.756, 3378.0], [13.759, 3677.0], [13.762, 3826.0], [13.765, 4103.0], [13.768, 3481.0], [13.772, 3135.0], [13.775, 2792.0], [13.778, 2596.0], [13.781, 2439.0], [13.784, 2057.0], [13.787, 2441.0], [13.79, 2419.0], [13.794, 2212.0], [13.797, 2338.0], [13.8, 2514.0], [13.803, 2169.0], [13.806, 2560.0], [13.809, 2386.0], [13.813, 2926.0], [13.816, 2814.0], [13.819, 3074.0], [13.822, 2955.0], [13.825, 3517.0], [13.828, 3811.0], [13.832, 3348.0], [13.835, 3517.0], [13.838, 3632.0], [13.841, 3665.0], [13.844, 3458.0], [13.847, 4225.0], [13.851, 4356.0], [13.854, 4892.0], [13.857, 6263.0], [13.86, 8871.0], [13.863, 13330.0], [13.866, 18576.0], [13.87, 27024.0], [13.873, 35336.0], [13.876, 41112.0], [13.879, 48624.0], [13.882, 50232.0], [13.885, 45224.0], [13.889, 37792.0], [13.892, 29320.0], [13.895, 21936.0], [13.898, 17240.0], [13.901, 13759.0], [13.904, 11613.0], [13.907, 9932.0], [13.911, 8932.0], [13.914, 8572.0], [13.917, 7714.0], [13.92, 6985.0], [13.923, 6161.0], [13.926, 5261.0], [13.93, 4951.0], [13.933, 4454.0], [13.936, 4614.0], [13.939, 5164.0], [13.942, 5037.0], [13.945, 5488.0], [13.949, 5782.0], [13.952, 5649.0], [13.955, 5976.0], [13.958, 5373.0], [13.961, 5207.0], [13.964, 4850.0], [13.968, 4469.0], [13.971, 5113.0], [13.974, 5743.0], [13.977, 5930.0], [13.98, 5667.0], [13.983, 6000.0], [13.987, 5546.0], [13.99, 4324.0], [13.993, 3553.0], [13.996, 2899.0], [13.999, 2917.0], [14.002, 2492.0], [14.006, 2422.0], [14.009, 2328.0], [14.012, 2346.0], [14.015, 3155.0], [14.018, 2900.0], [14.021, 3644.0], [14.024, 3718.0], [14.028, 3369.0], [14.031, 3693.0], [14.034, 3509.0], [14.037, 2939.0], [14.04, 2494.0], [14.043, 2430.0], [14.047, 1956.0], [14.05, 1934.0], [14.053, 2208.0], [14.056, 2394.0], [14.059, 2928.0], [14.062, 2855.0], [14.066, 3029.0], [14.069, 3450.0], [14.072, 2901.0], [14.075, 2743.0], [14.078, 2329.0], [14.081, 2277.0], [14.085, 2022.0], [14.088, 2083.0], [14.091, 1839.0], [14.094, 2048.0], [14.097, 2101.0], [14.1, 2431.0], [14.104, 2559.0], [14.107, 3053.0], [14.11, 3067.0], [14.113, 3813.0], [14.116, 3418.0], [14.119, 3607.0], [14.122, 3885.0], [14.126, 3596.0], [14.129, 3810.0], [14.132, 4029.0], [14.135, 3890.0], [14.138, 3734.0], [14.141, 3408.0], [14.145, 3562.0], [14.148, 3888.0], [14.151, 4197.0], [14.154, 3712.0], [14.157, 4353.0], [14.16, 4165.0], [14.164, 4521.0], [14.167, 3849.0], [14.17, 3474.0], [14.173, 2892.0], [14.176, 2381.0], [14.179, 2574.0], [14.183, 1998.0], [14.186, 2085.0], [14.189, 1692.0], [14.192, 2045.0], [14.195, 2168.0], [14.198, 2442.0], [14.202, 2140.0], [14.205, 2430.0], [14.208, 2288.0], [14.211, 1826.0], [14.214, 1727.0], [14.217, 1746.0], [14.221, 1657.0], [14.224, 1477.0], [14.227, 1808.0], [14.23, 2471.0], [14.233, 2970.0], [14.236, 3199.0], [14.239, 2981.0], [14.243, 3710.0], [14.246, 3709.0], [14.249, 3588.0], [14.252, 4558.0], [14.255, 4830.0], [14.258, 5898.0], [14.262, 7559.0], [14.265, 9323.0], [14.268, 11122.0], [14.271, 12689.0], [14.274, 12289.0], [14.277, 12706.0], [14.281, 10895.0], [14.284, 9677.0], [14.287, 8499.0], [14.29, 7932.0], [14.293, 7007.0], [14.296, 6236.0], [14.3, 6262.0], [14.303, 5102.0], [14.306, 5159.0], [14.309, 4001.0], [14.312, 3227.0], [14.315, 2701.0], [14.319, 2640.0], [14.322, 2192.0], [14.325, 2502.0], [14.328, 2577.0], [14.331, 2850.0], [14.334, 3008.0], [14.338, 3709.0], [14.341, 5069.0], [14.344, 5595.0], [14.347, 6946.0], [14.35, 8815.0], [14.353, 9292.0], [14.356, 10297.0], [14.36, 10303.0], [14.363, 10312.0], [14.366, 7692.0], [14.369, 7419.0], [14.372, 5784.0], [14.375, 4418.0], [14.379, 3498.0], [14.382, 3724.0], [14.385, 4443.0], [14.388, 5349.0], [14.391, 7643.0], [14.394, 9797.0], [14.398, 12542.0], [14.401, 13453.0], [14.404, 14998.0], [14.407, 14926.0], [14.41, 13122.0], [14.413, 11459.0], [14.417, 9589.0], [14.42, 7842.0], [14.423, 5730.0], [14.426, 4583.0], [14.429, 4161.0], [14.432, 3835.0], [14.436, 3833.0], [14.439, 3785.0], [14.442, 3953.0], [14.445, 3910.0], [14.448, 3651.0], [14.451, 4111.0], [14.455, 4280.0], [14.458, 4600.0], [14.461, 3988.0], [14.464, 3777.0], [14.467, 4364.0], [14.47, 3986.0], [14.473, 4213.0], [14.477, 4710.0], [14.48, 6119.0], [14.483, 8492.0], [14.486, 11351.0], [14.489, 13738.0], [14.492, 14919.0], [14.496, 15287.0], [14.499, 14489.0], [14.502, 13232.0], [14.505, 11772.0], [14.508, 9693.0], [14.511, 8613.0], [14.515, 10494.0], [14.518, 12604.0], [14.521, 15939.0], [14.524, 22336.0], [14.527, 27400.0], [14.53, 34296.0], [14.534, 39168.0], [14.537, 39008.0], [14.54, 35832.0], [14.543, 31024.0], [14.546, 24440.0], [14.549, 18840.0], [14.553, 13006.0], [14.556, 9411.0], [14.559, 7341.0], [14.562, 4910.0], [14.565, 3956.0], [14.568, 3258.0], [14.572, 2917.0], [14.575, 2559.0], [14.578, 1969.0], [14.581, 1989.0], [14.584, 1944.0], [14.587, 1739.0], [14.59, 2040.0], [14.594, 1796.0], [14.597, 2231.0], [14.6, 2584.0], [14.603, 3036.0], [14.606, 3400.0], [14.609, 3891.0], [14.613, 4220.0], [14.616, 4088.0], [14.619, 4903.0], [14.622, 4390.0], [14.625, 4074.0], [14.628, 4274.0], [14.632, 3470.0], [14.635, 3293.0], [14.638, 3109.0], [14.641, 2717.0], [14.644, 2546.0], [14.647, 2522.0], [14.651, 2323.0], [14.654, 2149.0], [14.657, 2015.0], [14.66, 2287.0], [14.663, 2556.0], [14.666, 2595.0], [14.67, 2512.0], [14.673, 2498.0], [14.676, 2827.0], [14.679, 2974.0], [14.682, 2667.0], [14.685, 2732.0], [14.688, 2651.0], [14.692, 2516.0], [14.695, 2185.0], [14.698, 3066.0], [14.701, 2298.0], [14.704, 2662.0], [14.707, 2642.0], [14.711, 2998.0], [14.714, 2576.0], [14.717, 2022.0], [14.72, 2354.0], [14.723, 1943.0], [14.726, 1916.0], [14.73, 2172.0], [14.733, 2587.0], [14.736, 2285.0], [14.739, 2170.0], [14.742, 2143.0], [14.745, 2258.0], [14.749, 2232.0], [14.752, 3016.0], [14.755, 3391.0], [14.758, 5440.0], [14.761, 8125.0], [14.764, 14023.0], [14.768, 24312.0], [14.771, 37976.0], [14.774, 56304.0], [14.777, 76448.0], [14.78, 98288.0], [14.783, 111104.0], [14.787, 118736.0], [14.79, 114984.0], [14.793, 99784.0], [14.796, 82528.0], [14.799, 63608.0], [14.802, 40864.0], [14.805, 26328.0], [14.809, 15337.0], [14.812, 9136.0], [14.815, 5133.0], [14.818, 3014.0], [14.821, 2302.0], [14.824, 2043.0], [14.828, 1933.0], [14.831, 1970.0], [14.834, 2570.0], [14.837, 3021.0], [14.84, 3010.0], [14.843, 2742.0], [14.847, 3299.0], [14.85, 3744.0], [14.853, 3643.0], [14.856, 3271.0], [14.859, 3241.0], [14.862, 3574.0], [14.866, 3405.0], [14.869, 3443.0], [14.872, 3659.0], [14.875, 3541.0], [14.878, 3996.0], [14.881, 4215.0], [14.885, 4042.0], [14.888, 4517.0], [14.891, 4330.0], [14.894, 3919.0], [14.897, 3745.0], [14.9, 3868.0], [14.904, 3717.0], [14.907, 3759.0], [14.91, 3707.0], [14.913, 3856.0], [14.916, 3929.0], [14.919, 4053.0], [14.922, 4454.0], [14.926, 4762.0], [14.929, 5121.0], [14.932, 6105.0], [14.935, 6248.0], [14.938, 7686.0], [14.941, 7993.0], [14.945, 9498.0], [14.948, 8739.0], [14.951, 8758.0], [14.954, 8860.0], [14.957, 8667.0], [14.96, 8489.0], [14.964, 7846.0], [14.967, 7386.0], [14.97, 6582.0], [14.973, 7063.0], [14.976, 6489.0], [14.979, 5699.0], [14.983, 5320.0], [14.986, 5671.0], [14.989, 4988.0], [14.992, 4877.0], [14.995, 4974.0], [14.998, 4844.0]]
изображение данных, построенных:
пики на этом графике будут самыми высокими точками, нарисованными на оси y.
существует ли «простой» способ отслеживания тренда и сообщения только о верхнем числе в последовательности (возможно, с запасом, чтобы следить за «шаткими» результатами)?
некоторый код, который делает то, что мне нужно, но не справляется с «шаткими» (короткими вверх и вниз) результатами и, вероятно, неэффективен:
high_points=[]
last=[0,0]
going_up = false
data.each do |x|
if going_up amp;amp; last[1] > x[1]
high_points << last
going_up = false
elsif x[1] > last[1]
going_up = true
end
last = x
end
high_points.select{|x| x[1]>17535}
Вывод:
[[13.705, 144256.0], [13.882, 50232.0], [14.534, 39168.0], [14.787, 118736.0]]
пример вывода графика:
#РЕДАКТИРОВАТЬ#
Принятый код из ответа:
def index_of_max_in_range(array, range)
max = 0
index = nil
range.each do |i|
if array[i] > max
max = array[i]
index = i
end
end
index
end
def high_datapoints
return @high_points if @high_points
@high_points = []
look_distance = 2
local_maximum_indexes = []
@data.each do |data|
points = data[:data].transpose
values = data[:data][1]
threshold = (values.max / 8)
points.each_index do |index|
next if values[index] < threshold
range_start = index - look_distance
range_start = 0 if range_start.negative?
range_end = index look_distance
range_end = values.size - 1 if range_end > values.size - 1
if index == index_of_max_in_range(values, Range.new(range_start, range_end))
local_maximum_indexes.push(index)
end
end
@high_points = local_maximum_indexes.reduce([]) { |acc, i| acc [points[i]] }
end
@high_points
end
Комментарии:
1. Пожалуйста, также приведите пример вывода, чтобы помочь уменьшить двусмысленность в отношении того, что такое «пик». квалифицируется как.
2. добавлено изображение подмножества данных в виде графика, поскольку я думаю, что это самый простой способ объяснить «пики»…
Ответ №1:
Может быть, что-то вроде:
points = [[13.003, 1710.0], [13.006, 1234.0], [13.009, 1207.0], [13.013, 1034.0], [13.016, 954.0], [13.019, 826.0], [13.022, 882.0], [13.025, 1239.0], [13.028, 1158.0], [13.032, 1459.0], [13.035, 1695.0], [13.038, 2374.0], [13.041, 2956.0], [13.044, 2945.0], [13.047, 2657.0], [13.051, 2958.0], [13.054, 2912.0], [13.057, 2031.0], [13.06, 1742.0], [13.063, 1459.0], [13.066, 1140.0], [13.07, 993.0], [13.073, 1010.0], [13.076, 1061.0], [13.079, 1021.0], [13.082, 1057.0], [13.085, 1030.0], [13.089, 1059.0], [13.092, 1336.0], [13.095, 1417.0], [13.098, 1270.0], [13.101, 1494.0], [13.104, 1492.0], [13.107, 1863.0], [13.111, 2289.0], [13.114, 2545.0], [13.117, 3372.0], [13.12, 3569.0], [13.123, 4484.0], [13.126, 4802.0], [13.13, 4525.0], [13.133, 4383.0], [13.136, 3686.0], [13.139, 3202.0], [13.142, 2132.0], [13.145, 1562.0], [13.149, 1346.0], [13.152, 1122.0], [13.155, 1117.0], [13.158, 1011.0], [13.161, 799.0], [13.164, 920.0], [13.168, 885.0], [13.171, 1288.0], [13.174, 1199.0], [13.177, 1277.0], [13.18, 1905.0], [13.183, 1853.0], [13.187, 1999.0], [13.19, 2558.0], [13.193, 2411.0], [13.196, 2251.0], [13.199, 2191.0], [13.202, 1883.0], [13.206, 1822.0], [13.209, 2341.0], [13.212, 3156.0], [13.215, 4374.0], [13.218, 7440.0], [13.221, 9609.0], [13.224, 11652.0], [13.228, 14345.0], [13.231, 14961.0], [13.234, 15048.0], [13.237, 15417.0], [13.24, 14061.0], [13.243, 12105.0], [13.247, 10332.0], [13.25, 8405.0], [13.253, 6828.0], [13.256, 5471.0], [13.259, 4222.0], [13.262, 2918.0], [13.266, 3087.0], [13.269, 2358.0], [13.272, 2878.0], [13.275, 3048.0], [13.278, 3473.0], [13.281, 4168.0], [13.285, 5027.0], [13.288, 6051.0], [13.291, 6520.0], [13.294, 7204.0], [13.297, 6583.0], [13.3, 6605.0], [13.304, 4962.0], [13.307, 4755.0], [13.31, 2911.0], [13.313, 2710.0], [13.316, 3076.0], [13.319, 4266.0], [13.323, 5643.0], [13.326, 8138.0], [13.329, 11037.0], [13.332, 13828.0], [13.335, 15239.0], [13.338, 15657.0], [13.341, 14039.0], [13.345, 11400.0], [13.348, 8604.0], [13.351, 6062.0], [13.354, 4338.0], [13.357, 3076.0], [13.36, 2439.0], [13.364, 2046.0], [13.367, 2055.0], [13.37, 1958.0], [13.373, 2365.0], [13.376, 2523.0], [13.379, 2586.0], [13.383, 2880.0], [13.386, 3121.0], [13.389, 2915.0], [13.392, 2480.0], [13.395, 2472.0], [13.398, 3032.0], [13.402, 2722.0], [13.405, 3588.0], [13.408, 4710.0], [13.411, 5875.0], [13.414, 7644.0], [13.417, 10165.0], [13.421, 14273.0], [13.424, 14209.0], [13.427, 14768.0], [13.43, 13449.0], [13.433, 11303.0], [13.436, 8163.0], [13.439, 5785.0], [13.443, 3517.0], [13.446, 2550.0], [13.449, 1953.0], [13.452, 1500.0], [13.455, 1291.0], [13.458, 1357.0], [13.462, 1011.0], [13.465, 1191.0], [13.468, 1320.0], [13.471, 1436.0], [13.474, 1939.0], [13.477, 1897.0], [13.481, 2475.0], [13.484, 3024.0], [13.487, 3522.0], [13.49, 3851.0], [13.493, 4528.0], [13.496, 3935.0], [13.5, 3700.0], [13.503, 3257.0], [13.506, 2895.0], [13.509, 2642.0], [13.512, 2121.0], [13.515, 2049.0], [13.519, 1891.0], [13.522, 2195.0], [13.525, 2137.0], [13.528, 2401.0], [13.531, 2397.0], [13.534, 3020.0], [13.538, 2787.0], [13.541, 3034.0], [13.544, 2737.0], [13.547, 2879.0], [13.55, 2569.0], [13.553, 2359.0], [13.556, 2302.0], [13.56, 1995.0], [13.563, 2280.0], [13.566, 2021.0], [13.569, 1854.0], [13.572, 1757.0], [13.575, 1440.0], [13.579, 1393.0], [13.582, 1903.0], [13.585, 1781.0], [13.588, 1831.0], [13.591, 2148.0], [13.594, 2255.0], [13.598, 2530.0], [13.601, 2560.0], [13.604, 2555.0], [13.607, 2266.0], [13.61, 1964.0], [13.613, 1760.0], [13.617, 2126.0], [13.62, 1956.0], [13.623, 1543.0], [13.626, 2123.0], [13.629, 2016.0], [13.632, 2131.0], [13.636, 2273.0], [13.639, 2280.0], [13.642, 2237.0], [13.645, 2160.0], [13.648, 2165.0], [13.651, 2348.0], [13.655, 2529.0], [13.658, 2448.0], [13.661, 2979.0], [13.664, 3284.0], [13.667, 4061.0], [13.67, 4018.0], [13.673, 4465.0], [13.677, 4945.0], [13.68, 7433.0], [13.683, 12841.0], [13.686, 23128.0], [13.689, 40640.0], [13.692, 63304.0], [13.696, 92560.0], [13.699, 123320.0], [13.702, 137280.0], [13.705, 144256.0], [13.708, 130024.0], [13.711, 104280.0], [13.715, 75816.0], [13.718, 47656.0], [13.721, 29248.0], [13.724, 17368.0], [13.727, 9820.0], [13.73, 6355.0], [13.734, 4448.0], [13.737, 3775.0], [13.74, 3221.0], [13.743, 2855.0], [13.746, 3027.0], [13.749, 2961.0], [13.753, 3366.0], [13.756, 3378.0], [13.759, 3677.0], [13.762, 3826.0], [13.765, 4103.0], [13.768, 3481.0], [13.772, 3135.0], [13.775, 2792.0], [13.778, 2596.0], [13.781, 2439.0], [13.784, 2057.0], [13.787, 2441.0], [13.79, 2419.0], [13.794, 2212.0], [13.797, 2338.0], [13.8, 2514.0], [13.803, 2169.0], [13.806, 2560.0], [13.809, 2386.0], [13.813, 2926.0], [13.816, 2814.0], [13.819, 3074.0], [13.822, 2955.0], [13.825, 3517.0], [13.828, 3811.0], [13.832, 3348.0], [13.835, 3517.0], [13.838, 3632.0], [13.841, 3665.0], [13.844, 3458.0], [13.847, 4225.0], [13.851, 4356.0], [13.854, 4892.0], [13.857, 6263.0], [13.86, 8871.0], [13.863, 13330.0], [13.866, 18576.0], [13.87, 27024.0], [13.873, 35336.0], [13.876, 41112.0], [13.879, 48624.0], [13.882, 50232.0], [13.885, 45224.0], [13.889, 37792.0], [13.892, 29320.0], [13.895, 21936.0], [13.898, 17240.0], [13.901, 13759.0], [13.904, 11613.0], [13.907, 9932.0], [13.911, 8932.0], [13.914, 8572.0], [13.917, 7714.0], [13.92, 6985.0], [13.923, 6161.0], [13.926, 5261.0], [13.93, 4951.0], [13.933, 4454.0], [13.936, 4614.0], [13.939, 5164.0], [13.942, 5037.0], [13.945, 5488.0], [13.949, 5782.0], [13.952, 5649.0], [13.955, 5976.0], [13.958, 5373.0], [13.961, 5207.0], [13.964, 4850.0], [13.968, 4469.0], [13.971, 5113.0], [13.974, 5743.0], [13.977, 5930.0], [13.98, 5667.0], [13.983, 6000.0], [13.987, 5546.0], [13.99, 4324.0], [13.993, 3553.0], [13.996, 2899.0], [13.999, 2917.0], [14.002, 2492.0], [14.006, 2422.0], [14.009, 2328.0], [14.012, 2346.0], [14.015, 3155.0], [14.018, 2900.0], [14.021, 3644.0], [14.024, 3718.0], [14.028, 3369.0], [14.031, 3693.0], [14.034, 3509.0], [14.037, 2939.0], [14.04, 2494.0], [14.043, 2430.0], [14.047, 1956.0], [14.05, 1934.0], [14.053, 2208.0], [14.056, 2394.0], [14.059, 2928.0], [14.062, 2855.0], [14.066, 3029.0], [14.069, 3450.0], [14.072, 2901.0], [14.075, 2743.0], [14.078, 2329.0], [14.081, 2277.0], [14.085, 2022.0], [14.088, 2083.0], [14.091, 1839.0], [14.094, 2048.0], [14.097, 2101.0], [14.1, 2431.0], [14.104, 2559.0], [14.107, 3053.0], [14.11, 3067.0], [14.113, 3813.0], [14.116, 3418.0], [14.119, 3607.0], [14.122, 3885.0], [14.126, 3596.0], [14.129, 3810.0], [14.132, 4029.0], [14.135, 3890.0], [14.138, 3734.0], [14.141, 3408.0], [14.145, 3562.0], [14.148, 3888.0], [14.151, 4197.0], [14.154, 3712.0], [14.157, 4353.0], [14.16, 4165.0], [14.164, 4521.0], [14.167, 3849.0], [14.17, 3474.0], [14.173, 2892.0], [14.176, 2381.0], [14.179, 2574.0], [14.183, 1998.0], [14.186, 2085.0], [14.189, 1692.0], [14.192, 2045.0], [14.195, 2168.0], [14.198, 2442.0], [14.202, 2140.0], [14.205, 2430.0], [14.208, 2288.0], [14.211, 1826.0], [14.214, 1727.0], [14.217, 1746.0], [14.221, 1657.0], [14.224, 1477.0], [14.227, 1808.0], [14.23, 2471.0], [14.233, 2970.0], [14.236, 3199.0], [14.239, 2981.0], [14.243, 3710.0], [14.246, 3709.0], [14.249, 3588.0], [14.252, 4558.0], [14.255, 4830.0], [14.258, 5898.0], [14.262, 7559.0], [14.265, 9323.0], [14.268, 11122.0], [14.271, 12689.0], [14.274, 12289.0], [14.277, 12706.0], [14.281, 10895.0], [14.284, 9677.0], [14.287, 8499.0], [14.29, 7932.0], [14.293, 7007.0], [14.296, 6236.0], [14.3, 6262.0], [14.303, 5102.0], [14.306, 5159.0], [14.309, 4001.0], [14.312, 3227.0], [14.315, 2701.0], [14.319, 2640.0], [14.322, 2192.0], [14.325, 2502.0], [14.328, 2577.0], [14.331, 2850.0], [14.334, 3008.0], [14.338, 3709.0], [14.341, 5069.0], [14.344, 5595.0], [14.347, 6946.0], [14.35, 8815.0], [14.353, 9292.0], [14.356, 10297.0], [14.36, 10303.0], [14.363, 10312.0], [14.366, 7692.0], [14.369, 7419.0], [14.372, 5784.0], [14.375, 4418.0], [14.379, 3498.0], [14.382, 3724.0], [14.385, 4443.0], [14.388, 5349.0], [14.391, 7643.0], [14.394, 9797.0], [14.398, 12542.0], [14.401, 13453.0], [14.404, 14998.0], [14.407, 14926.0], [14.41, 13122.0], [14.413, 11459.0], [14.417, 9589.0], [14.42, 7842.0], [14.423, 5730.0], [14.426, 4583.0], [14.429, 4161.0], [14.432, 3835.0], [14.436, 3833.0], [14.439, 3785.0], [14.442, 3953.0], [14.445, 3910.0], [14.448, 3651.0], [14.451, 4111.0], [14.455, 4280.0], [14.458, 4600.0], [14.461, 3988.0], [14.464, 3777.0], [14.467, 4364.0], [14.47, 3986.0], [14.473, 4213.0], [14.477, 4710.0], [14.48, 6119.0], [14.483, 8492.0], [14.486, 11351.0], [14.489, 13738.0], [14.492, 14919.0], [14.496, 15287.0], [14.499, 14489.0], [14.502, 13232.0], [14.505, 11772.0], [14.508, 9693.0], [14.511, 8613.0], [14.515, 10494.0], [14.518, 12604.0], [14.521, 15939.0], [14.524, 22336.0], [14.527, 27400.0], [14.53, 34296.0], [14.534, 39168.0], [14.537, 39008.0], [14.54, 35832.0], [14.543, 31024.0], [14.546, 24440.0], [14.549, 18840.0], [14.553, 13006.0], [14.556, 9411.0], [14.559, 7341.0], [14.562, 4910.0], [14.565, 3956.0], [14.568, 3258.0], [14.572, 2917.0], [14.575, 2559.0], [14.578, 1969.0], [14.581, 1989.0], [14.584, 1944.0], [14.587, 1739.0], [14.59, 2040.0], [14.594, 1796.0], [14.597, 2231.0], [14.6, 2584.0], [14.603, 3036.0], [14.606, 3400.0], [14.609, 3891.0], [14.613, 4220.0], [14.616, 4088.0], [14.619, 4903.0], [14.622, 4390.0], [14.625, 4074.0], [14.628, 4274.0], [14.632, 3470.0], [14.635, 3293.0], [14.638, 3109.0], [14.641, 2717.0], [14.644, 2546.0], [14.647, 2522.0], [14.651, 2323.0], [14.654, 2149.0], [14.657, 2015.0], [14.66, 2287.0], [14.663, 2556.0], [14.666, 2595.0], [14.67, 2512.0], [14.673, 2498.0], [14.676, 2827.0], [14.679, 2974.0], [14.682, 2667.0], [14.685, 2732.0], [14.688, 2651.0], [14.692, 2516.0], [14.695, 2185.0], [14.698, 3066.0], [14.701, 2298.0], [14.704, 2662.0], [14.707, 2642.0], [14.711, 2998.0], [14.714, 2576.0], [14.717, 2022.0], [14.72, 2354.0], [14.723, 1943.0], [14.726, 1916.0], [14.73, 2172.0], [14.733, 2587.0], [14.736, 2285.0], [14.739, 2170.0], [14.742, 2143.0], [14.745, 2258.0], [14.749, 2232.0], [14.752, 3016.0], [14.755, 3391.0], [14.758, 5440.0], [14.761, 8125.0], [14.764, 14023.0], [14.768, 24312.0], [14.771, 37976.0], [14.774, 56304.0], [14.777, 76448.0], [14.78, 98288.0], [14.783, 111104.0], [14.787, 118736.0], [14.79, 114984.0], [14.793, 99784.0], [14.796, 82528.0], [14.799, 63608.0], [14.802, 40864.0], [14.805, 26328.0], [14.809, 15337.0], [14.812, 9136.0], [14.815, 5133.0], [14.818, 3014.0], [14.821, 2302.0], [14.824, 2043.0], [14.828, 1933.0], [14.831, 1970.0], [14.834, 2570.0], [14.837, 3021.0], [14.84, 3010.0], [14.843, 2742.0], [14.847, 3299.0], [14.85, 3744.0], [14.853, 3643.0], [14.856, 3271.0], [14.859, 3241.0], [14.862, 3574.0], [14.866, 3405.0], [14.869, 3443.0], [14.872, 3659.0], [14.875, 3541.0], [14.878, 3996.0], [14.881, 4215.0], [14.885, 4042.0], [14.888, 4517.0], [14.891, 4330.0], [14.894, 3919.0], [14.897, 3745.0], [14.9, 3868.0], [14.904, 3717.0], [14.907, 3759.0], [14.91, 3707.0], [14.913, 3856.0], [14.916, 3929.0], [14.919, 4053.0], [14.922, 4454.0], [14.926, 4762.0], [14.929, 5121.0], [14.932, 6105.0], [14.935, 6248.0], [14.938, 7686.0], [14.941, 7993.0], [14.945, 9498.0], [14.948, 8739.0], [14.951, 8758.0], [14.954, 8860.0], [14.957, 8667.0], [14.96, 8489.0], [14.964, 7846.0], [14.967, 7386.0], [14.97, 6582.0], [14.973, 7063.0], [14.976, 6489.0], [14.979, 5699.0], [14.983, 5320.0], [14.986, 5671.0], [14.989, 4988.0], [14.992, 4877.0], [14.995, 4974.0], [14.998, 4844.0]]
look_distance = 2
local_maximum_indexes = []
def index_of_max_in_range(array, range)
max = 0
index = nil
range.each do |i|
if array[i] > max
max = array[i]
index = i
end
end
index
end
values = points.map {|v| v[1]}
points.each_index do |index|
range_start = index - look_distance
range_start = 0 if range_start < 0
range_end = index look_distance
range_end = values.size - 1 if range_end > values.size - 1
if index == index_of_max_in_range(values, Range.new(range_start, range_end))
local_maximum_indexes.push(index)
end
end
local_maximum_indexes.reduce([]) { |acc, i| acc [points[i]] }
Комментарии:
1. к сожалению, мне нужно получить значение X с его помощью, иначе может возникнуть проблема с тем, что значение Y появляется на графике более одного раза.
2. да, это хорошо работает! теперь, чтобы поиграть с ним, чтобы посмотреть, смогу ли я сделать его совместимым с моим кодом 🙂
3. красивый помеченный график (полный набор данных): imgur.com/vodOPLG спасибо (не беспокойтесь о перекрытии, это моя забота)
4. Аккуратно! 🙂 Вам нужно было изменить look_distance (просто из любопытства)?
5. нет, но я включил свой «пороговый» код, чтобы игнорировать все низкие пики. вопрос отредактирован, чтобы добавить код, относящийся к ответу. еще раз спасибо 🙂