Module: Panomosity::Utils
- Included in:
- GeneralizedNeighborhood, GeneralizedNeighborhood, Measure, Neighborhood, NeighborhoodGroup, NeighborhoodGroup, Optimizer, Pair, Pair, Panorama, Runner
- Defined in:
- lib/panomosity/utils.rb
Instance Method Summary collapse
- #calculate_average(name: 'value', values: [], logger: nil, ignore_empty: false) ⇒ Object
- #calculate_average_and_std(name: 'value', values: [], logger: nil, ignore_empty: false) ⇒ Object
- #remove_outliers(method: :value, values: [], logger: nil) ⇒ Object
Instance Method Details
#calculate_average(name: 'value', values: [], logger: nil, ignore_empty: false) ⇒ Object
17 18 19 20 21 22 |
# File 'lib/panomosity/utils.rb', line 17 def calculate_average(name: 'value', values: [], logger: nil, ignore_empty: false) return 0 if ignore_empty && values.empty? average_value = values.reduce(:+).to_f / values.count logger.debug "average #{name}: #{average_value}" if logger average_value end |
#calculate_average_and_std(name: 'value', values: [], logger: nil, ignore_empty: false) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/panomosity/utils.rb', line 3 def calculate_average_and_std(name: 'value', values: [], logger: nil, ignore_empty: false) return [0, 0] if ignore_empty && values.empty? average_value = calculate_average(name: name, values: values, logger: logger, ignore_empty: ignore_empty) if values.count == 1 value_std = 0.0 else value_std = Math.sqrt(values.map { |v| (v - average_value) ** 2 }.reduce(:+) / (values.count - 1)) end logger.debug "#{name} std: #{value_std}" if logger [average_value, value_std] end |
#remove_outliers(method: :value, values: [], logger: nil) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/panomosity/utils.rb', line 24 def remove_outliers(method: :value, values: [], logger: nil) avg, std = *calculate_average_and_std(values: values.map(&method)) while std >= 0.1 values.select! { |c| (avg - c.send(method)).abs <= std } avg, std = *calculate_average_and_std(values: values.map(&method)) logger.debug [avg , std, values.count].to_s if logger end values end |