Question

Je teste un arbitrairement grand éventail de Logicals, et je arbitrairement dimensionnées voudrais savoir si un ou plusieurs sont vraies. any() ne fonctionne que sur une seule dimension à la fois, tout comme sum(). Je sais que je pouvais tester le nombre de dimensions et répéter any() jusqu'à ce que je reçois une réponse unique, mais je voudrais une plus rapide, et franchement, plus élégantes, l'approche.

Idées?

Je suis en 2009a (R17, dans le vieux langage, je pense).

Était-ce utile?

La solution

Si vos données sont dans une matrice , essayez ceci:

anyAreTrue = any(A(:));

EDIT: Pour expliquer un peu plus pour ceux qui ne connaissent pas bien la syntaxe, A (:) utilise opérateur du côlon pour prendre le contenu du tableau , peu importe la les dimensions et les remodeler dans un vecteur de colonne unique (de taille numel (a) -en-1). Un seul appel à TOUT est nécessaire pour faire fonctionner le vecteur colonne résultante.

Autres conseils

Comme l'a souligné, la bonne solution est de remodeler le résultat dans un vecteur. Ensuite, tout donnera le résultat souhaité. Ainsi,

tout (A (:))

donne le résultat global, vrai si l'un quelconque des éléments numel (A) étaient vraies. Vous pouvez également avoir utilisé

tout (remodeler (A, [], 1))

qui utilise l'opérateur Reshape explicitement. Si vous ne souhaitez pas faire l'étape supplémentaire de convertir vos matrices dans des vecteurs pour appliquer une, puis une autre approche consiste à écrire une fonction de votre propre. Par exemple, voici une fonction qui le ferait pour vous:

======================

= résultat de la fonction myany (A)

% détermine si un élément du tout dans A est non nul

= résultat tout (A (:));

======================

Enregistrer cette sous forme de fichier m sur votre chemin de recherche. La beauté de Matlab (vrai pour tout langage de programmation) est-il est entièrement extensible. S'il y a une certaine capacité que vous souhaitez qu'il avait, il suffit d'écrire un petit idiome qu'il fait. Si vous faites cela assez souvent, vous avez personnalisé l'environnement pour répondre à vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top