Работать с несколькими индексами для массива numpy используя элементарные операторы - PullRequest
0 голосов
/ 31 октября 2019

Я знаю, что могу использовать реляционный оператор в моем массиве, чтобы получить новый массив логических значений. В приведенном ниже примере создается логический массив с идентичной формой исходного массива, но со значениями True, если элемент с тем же индексом больше 0, и False в противном случае.

>>> a = np. array ([ [0 , -2 ,5] , [ -1 , -8 , -12] ,[2 , 4, -9] ])
>>> z = a > 0
>>> print (a)
[[ 0 2 5]
[ 1 -8 -12]
[ 2 4 -9]]
>>> print (z)
[[ False True True ]
[ True False False ]
[ True True False ]]

What I 'Интересно, есть ли способ одновременного сравнения нескольких индексов, чтобы проверить, больше ли два или более значений, например 0. Например, строка, которая будет проверять каждую строку, чтобы увидеть, если первый элемент и второй элемент больше 0. Что-то, чембудет выглядеть как

z = a[:,0] > 0 and a[:,1] > 0

и будет производить результат

array([False, False,  True])

, потому что a [0,1] = True, но a [0,0] = False, a [1,0] = True, но a [0,1] = False, и a [2,0] и a [0,2] имеют значение True, возвращая False для первого ряда, False для второго ряда и True для третьегострока


Я хочу сделать все это без цикла

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Просто используйте logical_and

Это вычислит 'логический &' элемент с точки зрения элемента.

np.logical_and(a[:,0] > 0, a[:,1] > 0)
0 голосов
/ 31 октября 2019

Не совсем цикл:

[b[0] > 0 and b[1] > 0 for b in a]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...