Pergunta

Eu estou testando uma série arbitrariamente grande, arbitrariamente dimensionados de logicals, e eu gostaria de saber se qualquer um ou mais delas são verdadeiras. any() só funciona em uma única dimensão de cada vez, como faz sum(). Eu sei que eu poderia testar o número de medidas e repita any() até eu conseguir uma única resposta, mas eu gostaria de um mais rápido, e, francamente, mais-elegante, abordagem.

Idéias?

Estou correndo 2009a (R17, na velha linguagem, eu acho).

Foi útil?

Solução

Se os dados estiverem em uma matriz A , tente o seguinte:

anyAreTrue = any(A(:));

EDIT: Para explicar um pouco mais para quem não está familiarizado com a sintaxe, A (:) usa o operador dois pontos para tirar todo o conteúdo do array a , não importa o que a dimensões, e remodelar-los num vector de coluna única (de tamanho Numel (a) -por-1). Apenas uma chamada para QUALQUER é necessário a operar no resultante vector de coluna.

Outras dicas

Como fora pontas, a solução correta é remodelar o resultado em um vetor. Então qualquer vai dar o resultado desejado. Assim,

qualquer (A (:))

dá o resultado global, verdadeiro se nenhum dos Numel elementos (A) eram verdadeiras. Você também poderia ter usado

qualquer (remodelagem (A, [], 1))

que usa o operador remodelar explicitamente. Se você não quiser fazer a etapa extra de converter suas matrizes nos vectores de aplicar qualquer, em seguida, uma outra abordagem é escrever uma função de seu próprio país. Por exemplo, aqui é uma função que iria fazê-lo para você:

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

= resultado da função myany (A)

% determina se qualquer elemento em tudo em uma era diferente de zero

= resultado qualquer que (A (:));

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

Salvar isso como um arquivo-m em seu caminho de pesquisa. A beleza de MATLAB (válido para qualquer linguagem de programação) é que é totalmente extensível. Se houver algum recurso que você gostaria que tivesse, basta escrever um pouco de linguagem que faz isso. Se você fizer isso com bastante frequência, você vai ter personalizado o ambiente para atender às suas necessidades.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top