Setze alle von Null verschiedenen Matrixelemente auf 1 (während die anderen 0 bleiben)

8

Ich habe ein Mesh-Gitter definiert als

%Vor%

und zwei Formen (in diesem Fall Ovale):

%Vor%

Nun möchte ich alle Punkte finden, die in entweder oval ungleich Null sind. Ich habe es versucht

%Vor%

aber da ich sie einfach addiere, wird der überlappende Bereich einen Wert von 2 anstelle der gewünschten 1 haben.

Wie kann ich alle Nicht-Null-Einträge in der Matrix auf 1 setzen, unabhängig von ihrem vorherigen Wert?

(Ich habe versucht normalized_union = union./union; , aber dann am Ende mit NaN in allen 0 Elementen, weil ich durch Null dividiere ...)

    
Tomas Lycken 07.03.2011, 23:21
quelle

3 Antworten

15

Einfachste Lösung: A=A~=0; , wobei A Ihre Matrix ist.

Dies führt nur eine logische Operation durch, die prüft, ob jedes Element Null ist. So gibt es 1 zurück, wenn das Element nicht Null ist und 0 , wenn es Null ist.

    
abcd 07.03.2011, 23:27
quelle
6

Erster Vorschlag: Verwenden Sie nicht union als Variablennamen, da dies die integrierte Funktion union . Ich würde vorschlagen, stattdessen den Variablennamen inEitherOval zu verwenden, da dieser beschreibender ist ...

Nun haben Sie eine Möglichkeit, etwas zu tun, was abcd vorschlägt , in dem Sie Ihre Matrizen hinzufügen o1 und o2 und verwenden Sie den relationalen Operator ungleich :

%Vor%

Einige andere Möglichkeiten in derselben Art verwenden den logischen Operator not oder die Funktion logical :

%Vor%

Die kürzeste Lösung besteht jedoch darin, den logischen or -Operator direkt anzuwenden o1 und o2 :

%Vor%

Dies führt zu einem Wert von 1, bei dem eine Matrix nicht Null und sonst Null ist.

    
gnovice 08.03.2011 00:49
quelle
2

Es gibt eine andere einfache Lösung, A = logisch (A)

    
user3832800 12.07.2014 17:36
quelle

Tags und Links