2016-06-03 4 views
0

У меня есть гигантский массив, называемый AllDays, хранящий дату и время.python, используя несколько условий с numpy, где

Я создал массив, который хранит информацию о день недели для каждого дня.

Я пытаюсь извлечь выходные дни только из оригинального массива данных Datetime AllDays.

Таким образом, со дня недели я пытаюсь следующее:

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

Я стремлюсь использовать его следующим образом, чтобы извлечь только в выходные дни:

weekends = AllDays[ind] 

Ошибка в строке

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

Вы можете определить переменную 'weekend_indexes = (0, 6)' и проверить 'DayOfWeek в weekend_indexes'. Тогда у вас должно быть одно условие для ввода вашего 'np.where()' –

+0

'ValueError' часто появляется. Он указывает, что массив используется в контексте, который ожидает скаляр True/False (например, 'или'). – hpaulj

ответ

3

Проблема здесь в том, что «или», которое не определено для numpy булевых массивов. Вы можете просто использовать сумму вместо:

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

редактирования: Вы можете также использовать побитовые или оператор:

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

, который дает тот же результат, но несколько лучше, так как мы работаем с булевыми .. .

+1

Элементарный оператор OR - '' '. 'np.where ((DayOfWeek == 0) | (DayOfWeek == 6))' – ayhan

+0

Да, это даже приятнее. Благодаря! –

+0

Почему работает с булеанами лучше? – Zanam

Смежные вопросы