Tensor Comprehensions
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
math.h
Go to the documentation of this file.
1 
16 #pragma once
17 
18 #include <exception>
19 
20 namespace tc {
21 
22 template <typename V>
23 typename V::value_type median(V v) {
24  if (v.size() == 0) {
25  throw std::out_of_range("median not defined for empty containers");
26  }
27 
28  auto n = v.size();
29  std::nth_element(v.begin(), v.begin() + n / 2, v.end());
30  if (n % 2 == 1) {
31  return v.at(n / 2);
32  }
33  auto rightElement = v.at(n / 2);
34  std::nth_element(v.begin(), v.begin() + n / 2 - 1, v.end());
35  return (v.at(n / 2 - 1) + rightElement) / 2;
36 }
37 
38 } // namespace tc
V::value_type median(V v)
Definition: math.h:23