Я пытаюсь скомпилировать октавную функцию .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
}
.у меня проблема в том, что я не уверен в синтаксисе применения вычисленных выше * медианных вычислений медианы только к указанным соответствующим частям входного вектора.Возможно, я должен упомянуть, что входные данные являются октавными ColumnVector input = args (0) .column_vector_value () и будут иметь длину от 10 до 50 значений.