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.
+1 très bien expliqué. –
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
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'))' –