Domanda

sto testando un arbitrariamente-large, un array arbitrariamente-dimensionato di Logicals, e mi piacerebbe sapere se uno o più di loro sono vere. any() funziona solo su una singola dimensione alla volta, come fa sum(). So che ho potuto testare il numero di dimensioni e ripetere any() fino a ottenere una sola risposta, ma mi piacerebbe un più veloce, e francamente, più-elegante, approccio.

idee?

Io corro 2009a (R17, nel vecchio gergo, credo).

È stato utile?

Soluzione

Se i dati sono in una matrice A , provate questo:

anyAreTrue = any(A(:));

Modifica Per spiegare un po 'di più per chi non ha familiarità con la sintassi, A (:) utilizza i operatore due punti di prendere l'intero contenuto della matrice a , non importa quale sia il dimensioni, e li rimodellare in un singolo vettore colonna (di Numel dimensione (a) -da-1). Una sola chiamata a QUALSIASI è necessaria per operare sul colonna vettore risultante.

Altri suggerimenti

Come sottolineato, la soluzione giusta è quella di rimodellare il risultato in un vettore. Quindi qualsiasi darà il risultato desiderato. Così,

qualsiasi (A (:))

dà il risultato globale, vero se qualcuno di Numel elementi (A) erano vere. Si potrebbe avere anche usato

qualsiasi (rimodellare (A, [], 1))

che utilizza l'operatore di rimodellare in modo esplicito. Se non si desidera fare il passo in più di convertire i matrici in vettori di applicare qualsiasi, poi un altro approccio è quello di scrivere una funzione di tua scelta. Per esempio, ecco una funzione che potrebbe farlo per voi:

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

risultato della funzione = myany (A)

% determina se qualsiasi elemento affatto in A è diverso da zero

risultato = qualsiasi (A (:));

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

Salva questo come un m-file nel percorso di ricerca. La bellezza di MATLAB (vero per qualsiasi linguaggio di programmazione) è che è completamente estensibile. Se c'è qualche possibilità che si sarebbe piaciuto che fosse, basta scrivere un po 'di linguaggio che lo fa. Se si esegue questa operazione abbastanza spesso, avrete personalizzato l'ambiente per soddisfare le vostre esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top