Pregunta

Estoy probando una serie arbitrariamente grande, dimensionado arbitrariamente de Logicals, y me gustaría saber si una o más de ellos son verdaderas. any() sólo funciona en una sola dimensión a la vez, al igual que sum(). Sé que podría poner a prueba el número de dimensiones y repetir any() hasta que consiga una única respuesta, pero me gustaría un más rápido, y francamente, más elegante-enfoque.

Las ideas?

Estoy corriendo 2009a (R17, en el antiguo lenguaje, creo).

¿Fue útil?

Solución

Si los datos están en una matriz , intente lo siguiente:

anyAreTrue = any(A(:));

EDIT: Para explicar un poco más para quien no está familiarizado con la sintaxis, A (:) utiliza los operador dos puntos a tomar todo el contenido de la matriz , no importa lo que la dimensiones, y formar de nuevo en un único vector columna (de Numel tamaño (a) -by-1). Sólo una llamada a que se necesita CUALQUIER para operar en el resultante vector columna.

Otros consejos

Como se ha señalado, la solución correcta es para formar de nuevo el resultado en un vector. Entonces, cualquier dará el resultado deseado. Por lo tanto,

cualquier (A (:))

da el resultado global, cierto si alguna de Numel elementos (a) eran verdaderas. También podría haber usado

cualquier (remodelar (A, [], 1))

que utiliza el operador de cambio de forma explícita. Si no desea realizar el paso adicional de convertir sus matrices en vectores de aplicar ninguna, a continuación, otro enfoque es escribir una función de su propia. Por ejemplo, aquí es una función que lo haga por usted:

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

resultado de la función = myany (A)

% determina si cualquier elemento en absoluto en A era distinto de cero

resultado = cualquier (A (:));

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

Guardar como un archivo-m en su ruta de búsqueda. La belleza de MATLAB (válido para cualquier lenguaje de programación) es que es totalmente extensible. Si hay alguna capacidad que gustaría que tenía, acaba de escribir un poco de lenguaje que lo hace. Si hace esto con la suficiente frecuencia, se ha personalizado el entorno para satisfacer sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top