#python #numpy
#python #numpy
Вопрос:
Я хотел бы сравнить множество m-by-n логических массивов numpy и получить массив той же формы, записи которого являются True
, если соответствующая запись хотя бы в одном из входов есть True
.
Самый простой способ, который я нашел для этого, это:
In [5]: import numpy as np
In [6]: a = np.array([True, False, True])
In [7]: b = np.array([True, True, False])
In [8]: a b
Out[8]: array([ True, True, True])
Но я также могу использовать
In [11]: np.stack([a, b]).sum(axis=0) > 0
Out[11]: array([ True, True, True])
Являются ли эти операции эквивалентными? Есть ли какие-либо ошибки, о которых я должен знать? Является ли один метод предпочтительнее другого?
Комментарии:
1. Во втором примере вы создаете новый массив numpy, вызывая stack . Вы создаете временный массив, содержащий все элементы вашего массива, для того, что является тривиальной операцией. Я бы остался,
a b
если вы не планируете выполнять несколько операций надnp.stack([a, b])
2. Это, конечно, кажется
np.any()
более подходящим и читаемым здесь.np.any([a, b], axis=0)
Ответ №1:
Вы можете использовать np.logical_or
a = np.array([True, False, True])
b = np.array([True, True, False])
np.logical_or(a,b)
это также работает для (m,n)
массивов
a = np.random.rand(3,4) < 0.5
b = np.random.rand(3,4) < 0.5
print('an',a)
print('bn',b)
np.logical_or(a,b)
Комментарии:
1. Для логических массивов вы также можете просто использовать
|
. (Логические массивы реализуют это как логическое или.)