Помогите сравнить 2 массива Python Numpy

Рейтинг: 0Ответов: 1Опубликовано: 11.04.2023

Имеется тренировочная задача, в которой надо создать массив, который получает результат поэлементно True, если четные элементы 1-го массива больше 2-го и True, если нечетные элементы 2го больше элементов первого. В противном случае возвращать False.

Пример массивов и результата:

n = [7, 3, 5, 9, 2, 5, 4, 8, 9, 0]
m = [2, 8, 6, 7, 1, 3, 2, 9, 5, 1]
res = [ True, True, False, False, True, False, True, True, True, True]

Решаю задачу с помощью функций np.arange и np.where, пока код вот такой :

res = np.where(
                   np.arange(len(n)) % 2 == 0, 
                   n > m, 
                   m > n
         )

Результат выдает неверный

array([ True, False,  True, False,  True, False,  True, False,  True, False])

Скорее всего потому что надо 2 условия: одно про четность индексов массива n, второе - про нечетность индексов массива m, но как 2 условия записать одновременно я не могу понять.

Помогите, пожалуйста, как тут сделать чтобы выполнялось 2 условия.

Ответы

▲ 3Принят

Так у вас n и m - это обычные списки, поэтому их сравнение работает не так, как вы думаете:

n = [7, 3, 5, 9, 2, 5, 4, 8, 9, 0]
m = [2, 8, 6, 7, 1, 3, 2, 9, 5, 1]
print(n > m)
# True

Чтобы получить нужный результат, нужно взять именно numpy.array, тогда сравнения будут работать правильно - поэлементно:

n = np.array([7, 3, 5, 9, 2, 5, 4, 8, 9, 0])
m = np.array([2, 8, 6, 7, 1, 3, 2, 9, 5, 1])
print(n > m)
# [ True False False  True  True  True  True False  True False]

Остальной код правильный и результат работы np.where теперь будет правильный.