Frage

Ich teste eine beliebig große, beliebig dimensionierte Anordnung von Logicals, und ich möchte herausfinden, ob eine oder mehrere von ihnen wahr sind. any() funktioniert nur auf einer einzigen Dimension zu einer Zeit, als sum() tut. Ich weiß, dass ich die Anzahl der Dimensionen testen konnte, und wiederholen Sie any(), bis ich eine einzige Antwort bekommen, aber ich mag einen schnellen, und ehrlich gesagt, mehr-elegant, Ansatz.

Ideen?

Ich bin mit 2009a (R17, im alten Sprachgebrauch, glaube ich).

War es hilfreich?

Lösung

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

anyAreTrue = any(A(:));

EDIT: , um ein bisschen mehr für jemanden nicht vertraut mit der Syntax zu erklären, A (:) verwendet die Doppelpunkt-Operator den gesamten Inhalt des Arrays nehmen A , egal, was die Abmessungen, und sie in einer einzigen Spalte Vektor (der Größe numel (A) -mit-1) neu zu gestalten. Nur ein Aufruf an ANY benötigt wird, um auf die für den Betrieb resultierender Spaltenvektor.

Andere Tipps

Wie bereits ausgeführt, ist die richtige Lösung um das Ergebnis in einen Vektor neu zu gestalten. Dann wird jeder das gewünschte Ergebnis. So

any (A (:))

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

any (umformen (A, [], 1))

, die den reshape Operator explizit verwendet. Wenn Sie den zusätzlichen Schritt der Umwandlung Ihrer Matrizen in Vektoren zu tun, nicht wollen, jeder bewerben, dann ist ein weiterer Ansatz, eine Funktion Ihrer eigenen zu schreiben. Zum Beispiel, hier ist eine Funktion, die es für Sie tun würde:

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

Funktionsergebnis = myany (A)

% bestimmt, ob jedes Element in A überhaupt nicht Null war

result = any (A (:));

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

Speichern Sie diese als m-Datei auf Ihrem Suchpfad. Die Schönheit von MATLAB (gilt für jede Programmiersprache) ist es vollständig erweiterbar ist. Wenn es irgendeine Möglichkeit, dass Sie wünschte, es hatte, schreiben Sie einfach ein wenig Idiom, das es tut. Wenn Sie dies oft genug tun, haben Sie die Umgebung angepasst an Ihre Bedürfnisse anzupassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top