2010-07-08 3 views
1

J'essaie de compiler une fonction octave .oct pour calculer les médianes des "moitiés" supérieure et inférieure d'un vecteur trié dont la longueur varie, par ex. pour un vecteur de longueur impaire comme [5,8,4,6,7] je veux la valeur médiane "inférieure" de 4,5 et 6 et la valeur médiane "supérieure" de 6,7 et 8 (6 fait partie de les deux calculs), et pour un vecteur de longueur égale comme [5,8,4,6,7,9] je veux la valeur médiane "inférieure" de 4,5 et 6 et la valeur médiane "supérieure" de 7,8 et 9. Je tente aussi d'utiliser une méthode rapide pour le faire et que vous voulez utiliser ce code, je me suis adapté et utiliser pour un calcul médian simple: -Médiane des moitiés supérieure et inférieure d'un vecteur

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; 
} 

je peux « split » le vecteur d'entrée en moitiés théoriques avec

Le problème que j'ai est que je ne suis pas sûr de la syntaxe à appliquer e ci-dessus * a commenté les calculs médians uniquement pour les parties pertinentes du vecteur d'entrée. Je devrais peut-être mentionner que l'entrée est un octave ColumnVector input = args (0) .column_vector_value() et aura entre 10 à 50 valeurs de long.

Répondre

0

si retourne input.length() int que vous devriez écrire

milieu = input.length()/2f + 0,5;

les valeurs entières utilisent toujours des nombres entiers en c

Questions connexes