Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
291 views
in Technique[技术] by (71.8m points)

ruby on rails - Extract Best higher and lower cumulative values for a specific period

I have the following array of Hash, which include heart_rate value.

My need is to find the higher and lower values for a period, when my user increase or decrease his heart_rate

[   #<
    track_point_id: 0, 
    heart_rate: 85, 
    date: "2020-12-15 12:06:51"
>, 
#<
    track_point_id: 1, 
    heart_rate: 85, 
    date: "2020-12-15 12:07:52"
>, 
#<
    track_point_id: 2,  
    heart_rate: 85, 
    date: "2020-12-15 12:08:53"
>, 
#<
    track_point_id: 3,  
    heart_rate: 100, 
    date: "2020-12-15 12:09:54"
>, 
#<
    track_point_id: 4,  
    heart_rate: 105, 
    date: "2020-12-15 12:10:55"
>, 
...
#<
    track_point_id: 100, 
    heart_rate: 102, 
    date: "2020-12-15 12:35:51"
>, 
#<
    track_point_id: 101, 
    heart_rate: 100, 
    date: "2020-12-15 12:36:52"
>, 
#<
    track_point_id: 102, 
    heart_rate: 99, 
    date: "2020-12-15 12:37:53"
>, 
#<
    track_point_id: 103, 
    heart_rate: 98, 
    date: "2020-12-15 12:38:54"
>, 
#<
    track_point_id: 104, 
    heart_rate: 97, 
    date: "2020-12-15 12:39:55"
>]

What I need to extract is the best Max Heart Rate Increase values, and the Max Heart Rate Decrease values

Let's call this array of Hash points

What I should probably start from is doing this

heart_rate = 0
bestIncrease = []
bestDecrease = []
points.each do |point|

    climb += point[:heart_rate] - (lastPoint[:heart_rate] or 0)
    heart_rate += point[:heart_rate]

    if climb > 0
        bestIncrease << [
            start_id: firstPoint[:track_point_id],
            end_id: point[:track_point_id],
            heart_rate: (point[:track_point_id]-firstPoint[:track_point_id]/numberOfDifferencePoints
        ]
    else
        bestDecrease << [
            start_id: firstPoint[:track_point_id],
            end_id: point[:track_point_id],
            heart_rate: point[:track_point_id]-firstPoint[:track_point_id]/numberOfDifferencePoints
        ]
        climb -= climb
    end
end

This code of course does not work at all.

  1. I need to find for some 2 minutes segment, which segments give me the higher heart_rate average values bestIncrease
  2. I need to find for some 2 minutes segment, which segments give me the lower heart_rate average values bestDecrease
  3. I need to be sure every segment do not overlap with each others
  4. I need to sort each segments by their best heart_rate values

I'm trying to find the good logic to achieve this, but I'm not sure to be able to find the overlapped segments

Any help would be much appreciate


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...