2012-04-09 3 views
1

Considérons les deux vecteurs:Recherche moyenne des entrées sélectionnées

v= [1 2 3 4 5 6 7] 

a=['a' 'b' 'c' 'a' 'a' 'a' 'd'] 

Je veux trouver la moyenne de toutes les entrées v dont les entrées correspondantes dans un « a »;

c.-à-test = moyenne (1,3,4,5)

J'ai essayé pour commencer à attraper les entrées:

for i=1:7 
if abs(char(a(i))-char(c))==0; 
    test(i)=v(i); 
end 
end 

Test

test =  1  0  0  4  5  6 

probl EMS:

  1. Il est assignant 0 pour les entrées non trouvé
  2. Il ne considère pas dernier terme

Répondre

1

Essayez d'utiliser la fonction ismember:

>> help ismember 
ismember True for set member. 
    ismember(A,S) for the array A returns an array of the same size as A 
    containing 1 where the elements of A are in the set S and 0 otherwise. 
    A and S can be cell arrays of strings. 

ismember formes votre vecteur test comme un tableau logique, ass igning 1 où le caractère « a » se trouve dans votre vecteur, et 0 où il est:

>> ismember(a, 'a') 

ans = 

1  0  0  1  1  1  0 

Vous pouvez alors l'utiliser comme un indice logique pour extraire les entrées correspondantes de votre vecteur v:

>> v(ismember(a, 'a')) 

ans = 

    1  4  5  6 

Enfin, vous pouvez prendre la moyenne de ce vecteur:

>> mean(v(ismember(a, 'a'))) 

ans = 

    4 

EDIT Je me suis rendu compte que dans votre cas, vous pouvez réellement former votre tableau logique dans une beaucoup plus simple, en utilisant un opérateur de comparaison:

>> a == 'a' 

ans = 

    1  0  0  1  1  1  0 

Ainsi, votre dernière ligne du code ressemblera à ceci:

>> mean(v(a == 'a')) 

ans = 

    4 

ismember est utile lorsque vous voulez tester la présence de plus d'un caractère, par exemple si vous voulez trouver des endroits où « a » ou « b » étaient.

+0

+1 très bien expliqué. –

+0

que faire si v et a étaient matrices J'ai essayé: pour k = 1: TotalnoOfGrids pour j = 1: noOfNodes M = moyen (Allvalues ​​{k} (char (Allquants {k} (j)) == char (mostCommonLetters {k}))); Ms {k} = MyPerfectAverage; Quelque chose ne va [email protected] Chaeatham – pac

+0

Si v et a sont des matrices de taille égale, tout le code ci-dessus fonctionnera mais vous devrez vectoriser un premier - ie appel 'mean (v (a (:) == 'a'))' –

Questions connexes