2016-06-03 13 views
0

Ich habe ein riesiges Array namens AllDays Speicherung von Datetime.Python mit mehreren Bedingungen mit numpy wo

Ich generierte ein Array, das Informationen zum Wochentag für jeden Tag speichert.

Ich versuche, die Wochenenden nur aus dem ursprünglichen Datetime-Array AllDays zu extrahieren.

Also, ab dem Tag der Woche Ich versuche folgende:

DayOfWeek = np.asarray([x.weekday() for x in AllDays]) 
#AllDays stores datetime objects 
ind = np.where(DayOfWeek == 0 or DayOfWeek == 6) #gives Error 

Mein Ziel ist es zu benutzen, wie folgend nur die Wochenenden zu extrahieren:

weekends = AllDays[ind] 

Fehler in Zeile

ind = np.where(DayOfWeek == 0 or DayOfWeek == 6) 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 
+1

Sie könnten eine Variable 'weekend_indexes = (0, 6)' definieren und 'DayOfWeek in weekend_indexes' überprüfen. Dann hätten Sie eine einzige Bedingung, um Ihre 'np.where()' –

+0

zu setzen. Der 'ValueError' kommt häufig vor. Es zeigt an, dass ein Array in einem Kontext verwendet wird, der ein skalares Wahr/Falsch erwartet (z. B. das "oder"). – hpaulj

Antwort

3

Das Problem hier ist das "oder", das nicht für numpy boolean Arrays definiert ist. Sie können nur eine Summe anstatt:

np.where((DayOfWeek == 0) + (DayOfWeek == 6)) 

bearbeiten: Sie können auch die bitweise oder-Operator verwenden:

np.where((DayOfWeek == 0) | (DayOfWeek == 6)) 

die das gleiche Ergebnis gibt aber etwas schöner als wir mit booleans arbeiten ..

+1

Der elementweise OR-Operator ist '|'. 'np.where ((DayOfWeek == 0) | (DayOfWeek == 6))' – ayhan

+0

Ja, das ist noch schöner. Vielen Dank! –

+0

Warum arbeitet mit booleans schöner? – Zanam

Verwandte Themen