La fonction de 'ne de la matrice contiennent la valeur de X?'
Est-il construit en fonction MATLAB pour savoir si une matrice contient une certaine valeur?
(ala PHP in_array()
)
- Pour les données à virgule flottante où une tolérance peut être désiré, notons que la version R2015a a ajouté de nouvelles fonctionnalités pour gérer cela avec une seule fonction intégrée. Les solutions acceptées pour une valeur entière données sont grands, mais pour les chars, saut à cette réponse. Désolé pour l'auto-promotion, mais c'est un gros plus pour MATLAB après des années de gens qui demandent.
Vous devez vous connecter pour publier un commentaire.
De nombreuses façons de le faire. ismember est la première qui vient à l'esprit, puisque c'est un jeu d'action pour l'adhésion que vous souhaitez prendre. Ainsi
Depuis le 15 n'est pas premier, mais 17, ismember a bien fait son travail ici.
Bien sûr, de trouver (ou pas du tout) fera aussi l'affaire. Mais ce ne sont pas vectorisé dans le sens que ismember a été. Nous pouvons tester pour voir si 15 est dans l'ensemble représenté par X, mais pour tester à la fois de ces chiffres vont prendre une boucle, ou des tests successifs.
ou,
Enfin, je tiens à souligner que les tests pour les valeurs exactes ne sont pas dangereux si le nombre est peut-être vrai flotteurs. Les Tests de comparaison des valeurs entières comme je l'ai montré sont faciles. Mais les tests de comparaison des nombres à virgule flottante doit utilisent généralement une tolérance.
any
. Mais vous pouvez mesurer vous-même (à l'aide detic
ettoc
).ismembertol
.que vous pouvez faire:
À faire la-dessus dans un vectorisé façon, utilisation:
ou @copeaux de bois suggère:
A
contient chacune de ces valeurs de e.g[true, true, false]
sensA
contient les valeurs5
et7
mais pas11
).Si vous avez besoin de vérifier si les éléments d'un vecteur sont dans l'autre, la meilleure solution est
ismember
comme mentionné dans les autres réponses.Toutefois, lorsque vous traitez avec des nombres à virgule flottante, ou simplement pour faire fermer correspond à (+- 1000 est également possible), la meilleure solution que j'ai trouvé est assez efficace L'Échange de fichier de Présentation:
ismemberf
Il donne un exemple très pratique:
Bien que la tolérance par défaut devraient normalement être suffisant, il vous donne plus de flexibilité
De données à virgule flottante, vous pouvez utiliser la nouvelle
ismembertol
function, qui calcule l'appartenance avec une tolérance spécifiée. Ceci est similaire à laismemberf
fonction trouvée dans le Fichier d'Échange, sauf qu'il est maintenant intégré à MATLAB. Exemple: