2010-07-08 8 views
1

Я пытаюсь скомпилировать функцию Octave .oct для вычисления медианов верхней и нижней «половинок» отсортированного вектора, который будет меняться по длине, например. для вектора нечетной длины, такого как [5,8,4,6,7] Я хочу «нижнее» среднее значение 4,5 и 6, а «верхнее» среднее значение 6,7 и 8 (6 является частью оба расчета), а для вектора четной длины, такого как [5,8,4,6,7,9], я хочу «нижнее» среднее значение 4,5 и 6, а «верхнее» среднее значение 7,8 и 9. Я также пытаюсь использовать быстрый способ сделать это, и хочет использовать этот код, я адаптированный и использовать для прямого медианного расчета вперед: -Медианы верхней и нижней половинок вектора

middle = input.length()/2 + 0.5; //middle for odd-length,"upper-middle" for even length 
std::nth_element(&input(0),&input(middle),&input(input.length())); 

if (input.length() % 2 != 0) { // odd length  
median = input(middle); 
} else { // even length 
// the "lower middle" is the max of the lower half 
lower_middle = *std::max_element(&input(0), &input(input.length()/2)); 
median = (input(middle) + lower_middle)/2.0; 
} 

я могу «разделить» входной вектор в теоретические половины с

if (input.length() % 2 != 0) { // input vector is odd length 

middle = input.length()/2 + 0.5; 
std::nth_element(&input(0), &input(middle), &input(input.length())); 
// *now find median of range &input(0) to &input(middle) incl. 
// *and median &input(middle) to &input(input.length()) incl. 
// *using fast method given above 

} else { // input vector is even length 

middle = input.length()/2; // uppermost value of the lower half of the input vector 
std::nth_element(&input(0), &input(middle), &input(input.length())); 
// *now find median of range &input(0) to &input(middle) incl. 
// *and median &input(middle + 1) to &input(input.length()) incl. 
// *using fast method given above 

} 

Проблема заключается в том, что я не уверен в синтаксисе применения e выше * прокомментировал медианные вычисления только указанным соответствующим частям входного вектора. Я должен, возможно, упомянуть, что вход представляет собой вход Octave ColumnVector = args (0) .column_vector_value() и будет составлять от 10 до 50 значений.

ответ

0

если input.length() возвращает Int, чем вы должны написать

средний = input.length()/2.f + 0,5;

целые значения всегда используют целочисленную математику в c