2009-04-02 11 views
3

Ich teste eine beliebig große, beliebig dimensionierte Reihe von logischen, und ich würde gerne herausfinden, ob eine oder mehrere von ihnen wahr sind. any() funktioniert nur in einer einzelnen Dimension gleichzeitig, ebenso wie sum(). Ich weiß, dass ich die Anzahl der Dimensionen testen und any() wiederholen kann, bis ich eine einzige Antwort bekomme, aber ich möchte einen schnelleren und offeneren, eleganteren Ansatz.Wie kann ich any() in einem mehrdimensionalen Array verwenden?

Ideen?

Ich laufe 2009a (R17, im alten Sprachgebrauch, denke ich).

Antwort

10

Wenn Ihre Daten in einer Matrix ist A, versuchen Sie dies:

anyAreTrue = any(A(:)); 

EDIT: Um ein bisschen mehr für jemand nicht vertraut mit der Syntax zu erklären, A (:) verwendet die colon operator nehmen Sie den gesamten Inhalt des Arrays A, egal, was die Dimensionen, und umformen sie in eine einzelne Spalte Vektor (der Größe Numeri (A) -by-1). Es wird nur ein Aufruf an ANY benötigt, um mit dem resultierenden Spaltenvektor zu arbeiten.

+0

Natürlich. Vielen Dank. – Marc

2

Wie bereits erwähnt, besteht die korrekte Lösung darin, das Ergebnis in einen Vektor umzuwandeln. Dann wird jeder das gewünschte Ergebnis geben. So

any (A (:))

gibt das globale Ergebnis true, wenn ein von numel (A) Elemente wahr waren. Sie könnten auch

verwendet haben jede (umformen (A, [], 1))

, die explizit den reshape Operator verwendet. Wenn Sie den zusätzlichen Schritt des Konvertierens Ihrer Matrizen in Vektoren nicht ausführen möchten, um einen beliebigen zu implementieren, besteht ein anderer Ansatz darin, eine eigene Funktion zu schreiben. Zum Beispiel, hier ist eine Funktion, die es für Sie tun würde:

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

Funktion result = myany (A)

% bestimmt, wenn ein Element an alle in einem nicht-Null-

Ergebnis war = any (A (:));

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

speichern als m-Datei auf Ihrem Suchpfad. Die Schönheit von MATLAB (wahr für jede Programmiersprache) ist, dass es vollständig erweiterbar ist. Wenn es eine Fähigkeit gibt, die Sie wünschen, schreiben Sie einfach ein kleines Idiom, das es tut. Wenn Sie dies oft genug tun, haben Sie die Umgebung an Ihre Bedürfnisse angepasst.

Verwandte Themen