Seite 1 von 1

Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 11:04
von st_baum
Ich möchte zählen, wie oft werte in zwei np arrays übereinstimmen kombiniert mit einer Bedingung.

Code: Alles auswählen

ar1 = np.array([1,0,0,1,0,1])
ar2 = np.array([0,1,0,0,0,1])
np.sum(ar1 == ar2)
Hier wird gezählt, wie oft die Werte übereinstimmen. Ich möchte aber, dass unter einer Bedingung gezählt wird. Z.b. das nur gezählt wird, wenn beide arrays den Wert "0" haben, d.h. der Output sollte "2" sein. Ich habe es mit einer Bedingung versucht, das klappt aber nicht und erscheint mir auch etwas klobig.

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 12:00
von Dennis89
Hallo,

zeig uns doch mal mit welcher Bedingung du das versucht hast. Dann wäre der Lerneffekt größer wie wenn du hier ein fertiges Skript bekommst. (Oder willst du genau das?)

Grüße
Dennis

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 12:16
von st_baum
Etwas wie:

Code: Alles auswählen

if ar1 == 1 :
    np.sum(ar1 == ar2)
Funktioniert nicht. Ich vermute, weil nicht durch alle Elemente von ar1 geloopt wird. Hab den Ansatz nicht weiterverfolgt. Bin davon ausgegangen, dass es eine elegantere Lösung gibt.

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 13:24
von ThomasL
Der Vergleich ar1 == ar2 liefert dir ein Array mit Boolean Werten zurück.

Code: Alles auswählen

array([False, False,  True, False,  True,  True])
Der Vergleich ar1 == 0 liefert dir auch ein Array mit Boolean Werten zurück

Code: Alles auswählen

array([False,  True,  True, False,  True, False])
Dieses zweite Array kannst du zur Indizierung des ersten benutzen.

Code: Alles auswählen

(ar1 == ar2)[ar1 == 0]
>>> array([False,  True,  True])
und kannst dann mit sum() alle True Werte addieren.

Code: Alles auswählen

sum((ar1 == ar2)[ar1 == 0])

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 13:26
von Dennis89
Deine Bedingung fragt ab ob 'ar1' der Wert '1' hat. Du willst aber wissen ob sich dieser Wert in dem Array 'ar1' befindet und nicht ob das Objekt 'ar1' gleich dem Wert '1' ist.

Code: Alles auswählen

if 1 in ar1:
Wenn sich jetzt eine eins indem Array befindet wird dass ausgeführt was du danach in den Namensraum der If-Abfrage schreibst.

Grüße
Dennis

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 13:59
von Sirius3
Du willst ja zwei Bedingungen miteinander verknüpfen, dass sowohl in ar1 als auch in ar2 eine 0 steht:

Code: Alles auswählen

((ar1 == 0) & (ar2 == 0)).sum()

Re: Bedingter Vergleich von numpy arrays

Verfasst: Donnerstag 31. Dezember 2020, 18:17
von st_baum
Sirius3 hat geschrieben: Donnerstag 31. Dezember 2020, 13:59 Du willst ja zwei Bedingungen miteinander verknüpfen, dass sowohl in ar1 als auch in ar2 eine 0 steht:

Code: Alles auswählen

((ar1 == 0) & (ar2 == 0)).sum()
[/quote]

Das passt, danke :-)